Java 如何使用递归?

Java 如何使用递归?,java,recursion,Java,Recursion,所以我发布了我的代码。但这个问题只是为了帮助我理解递归到底是什么。 我知道我需要一个基本情况和递归情况。 我的任务是从用户那里读取输入,并颠倒顺序。动物会被杀死 现在我的基本情况是:如果用户输入允许的空行。 而我的递归情况:只要输入有字符 我正在使用一个字符串来存储输入,我可能正在其中的某个地方使用.charAt[0]命令 我正在寻找解释,以帮助我更好的代码,我将需要使用这个任务。 我正在使用Eclipse上的Java来使用它,您必须首先检查您的参数并决定是否应该使用它。如果您的参数建议您应该使

所以我发布了我的代码。但这个问题只是为了帮助我理解递归到底是什么。 我知道我需要一个基本情况和递归情况。 我的任务是从用户那里读取输入,并颠倒顺序。动物会被杀死 现在我的基本情况是:如果用户输入允许的空行。 而我的递归情况:只要输入有字符 我正在使用一个字符串来存储输入,我可能正在其中的某个地方使用.charAt[0]命令

我正在寻找解释,以帮助我更好的代码,我将需要使用这个任务。 我正在使用Eclipse上的Java来使用它,您必须首先检查您的参数并决定是否应该使用它。如果您的参数建议您应该使用,那么您应该与新参数一起使用,否则您应该返回一个结果


您可以在同一方法中多次使用。

以下是您如何看待此问题:

如果字符串为空,则返回空字符串

否则,删除字符串的第一个字符,我们将其命名为c,并对剩余部分调用reverse,我们将其命名为cs,然后将c追加到末尾

以下是一些不会编译的伪代码,只是给你一个想法:

reverse(String input)
  if (input.isEmpty())
    return input;
  else {
    String c = getFirstCharacterOfString(input);  //write this on your own
    String cs = getAllCharactersButTheFirst(input); //write this on your own
    return reverse(cs) + c;
  }

我不会试图直接回答,因为您似乎想了解它是如何工作的,所以我将给您一个递归函数示例

下面是一个示例,说明如何使用递归对1到100之间的所有数字求和,这与您要做的很接近

int sumAllNumbers(int actualNumber, int limit)
{
   if (actualNumber < limit) return sumAllNumbers(actualNumber + 1, limit) + actualNumber;
   return actualNumber;
}
如果您了解了它的工作原理,我认为您可以找到如何使用递归函数来反转字符串。
您必须记住的主要一点是,您必须有一个停止递归的条件。

递归是在其执行线程中引用自身的代码。 编写递归代码的关键是识别重复模式并只编写一次该模式

在您的情况下,模式是字符切换。考虑这个伪代码:

pattern ( string ) reverse = (all but the first character of the string, reversed) + (the first character) 第一个术语可以使用相同的模式,即:

pattern(all but the first character of the string) 但是,为了确保此操作不会永远运行,必须在没有更多字符可切换时停止,即如果遇到不可逆字符串:

pattern ( string ) if string length < 2 return string else reverse = pattern(all but the first character of the string) + (first character of the string) return reverse
我没有投反对票,但这个问题不太适合这样做。请提出一个具体的问题,以便我们能以具体的方式回答。照目前的情况,如果不写一篇关于递归工作原理的教程,就无法回答这个问题,这不是阿达姆根的长处。@AdamGent我一直在Java中使用递归。事实上,它不像哈斯凯尔那样简洁,并不意味着它不能被完成或教授。@Armando Garcia-好吧,我甚至为你做了谷歌搜索。请看这个:。。。或者-您可以返回最后一个字符,后跟所有其他字符。只需添加一些对于原始海报可能不明显的信息,reverse方法将是1定义的递归方法。还有2个。@OldCurmudgeon是的,那就行了too@Smit:这就是1for@tieTYT对不起,我误解了。你的例子说明得很清楚。我将删除我的评论。