所以我发布了我的代码。但是这个问题只是为了帮助我理解递归到底是什么。我知道我需要一个基本案例和递归案例。我的任务是读取用户的输入,并颠倒它的顺序。“动物”会变成“slamina” 现在我的基本情况是:如果用户输入一个空行(这是允许的)。虽然我的递归案例:只要输入有字符,我就使用字符串来存储输入,并且我可能在其中某处使用“.charAt[0]”命令?
我正在寻找解释来帮助我更好地编写我需要用于此作业的代码。我在 Eclipse 上使用 Java
递归是在其执行线程中引用自身的代码。编写递归代码的关键是识别重复模式并且只编写一次该模式。
在您的情况下,模式是字符切换。考虑这个伪代码:
模式(字符串) reverse =(除了字符串的第一个字符之外的所有字符,反转) +(第一个字符)
然后第一项可以使用相同的模式,即:
模式(字符串的第一个字符除外)
但是,为了确保它不会永远运行,必须在没有更多字符可以切换时停止它(即,如果遇到不可逆的字符串):
模式(字符串) 如果字符串长度 < 2 返回字符串 else reverse = pattern(除了字符串的第一个字符之外的所有字符) +(字符串的第一个字符) 返回反向
以下是您可以如何考虑此问题的方法:
如果字符串为空,则返回一个空字符串。
否则,删除字符串的第一个字符(我们将其命名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;
}
如果您了解它的工作原理,我想您可以弄清楚如何使用递归函数来反转字符串。你必须记住的主要事情是你必须有一个条件来停止递归。