0

我已经写了一些删除字符串的第一个字符并将其放在剩余子字符串之后然后打印出来的东西,说明是通过删除句子的第一个字母并将其连接到反转的剩余子字符串来使用递归来反转句子, IE。“你好”产生“olleH”。但我不知道递归部分,任何帮助将不胜感激,谢谢。这是我的代码:

public class Sentence {

   private String sentence;

   public Sentence(String astring) {
      sentence = astring;
   }

   public void reverse(){

   String firstChar = sentence.substring(0,1);

   String remainingSen = sentence.substring(1,sentence.length());

   System.out.println(remainingSen+firstChar);  
  }
}
4

4 回答 4

1

看到这是一个家庭作业,我会给出一些开始的提示:

  • 递归方法调用自身来完成部分工作
  • 采用参数并返回字符串的反转版本的方法可以调用自身reverse()String
  • 如果您删除第一个字符并将其添加到反转的左侧的末尾,您的工作就完成了。

如果你解决了上面的提示,你应该已经解决了你的问题:-)

于 2009-12-08T20:05:06.410 回答
1

一般来说,如果你想写一个递归函数,你会在它自己内部调用这个函数。例如:

void fn() {
    fn() 
}

这个例子显然是一个无限循环。

在您的情况下,您希望重复调用您的 reverse 函数,直到达到定义的状态(Hello 转换为 olleH)。

public class Sentence {

  private String sentence;

  // ... etc ...

  public void reverse() {
      // Base Case: When do you want this to end? This statement is designed
      // to end the recursion when a desired state is reached

      // some sort of string manipulation (which you have already worked on)

      // call reverse() to continue the 'looping' until 
      // a desired _case_ is reached
  }
}

我认为这是一个家庭作业问题,并且很快就会到期,所以我不会提供确切的答案......

更新 1:我修改了反向示例以匹配所表达的约束。

于 2009-12-08T20:12:06.300 回答
0
public void reverse()
{
    if(text.length() > 0)
    {
        String first = text.substring(0,1);
        String remaining = text.substring(1);

        Sentence shorter = new Sentence(remaining);
        shorter.reverse();

        text = shorter.text + first;
    }
}
于 2013-03-11T00:31:23.930 回答
0

你了解递归的概念吗?如果是这样,请找出基本情况(将停止递归的条件)以及您想要在每个递归步骤中执行的操作。提示:您需要一个递归方法,该方法将要反转的字符串并返回反转后的字符串。不会直接回答硬件问题,但这应该可以帮助您入门。

编辑:(另一个提示)不要尝试使 void reverse() 方法递归。让它调用一个不同的、私有的递归方法来实际进行反转。

于 2009-12-08T20:05:13.883 回答