-3

所以我发布了我的代码。但是这个问题只是为了帮助我理解递归到底是什么。我知道我需要一个基本案例递归案例。我的任务是读取用户的输入,并颠倒它的顺序。“动物”会变成“slamina” 现在我的基本情况是:如果用户输入一个空行(这是允许的)。虽然我的递归案例:只要输入有字符,我就使用字符串来存储输入,并且我可能在其中某处使用“.charAt[0]”命令?

我正在寻找解释来帮助我更好地编写我需要用于此作业的代码。我在 Eclipse 上使用 Java

4

4 回答 4

1

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

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

模式(字符串)
    reverse =(除了字符串的第一个字符之外的所有字符,反转)
              +(第一个字符)

然后第一项可以使用相同的模式,即:

模式(字符串的第一个字符除外) 

但是,为了确保它不会永远运行,必须在没有更多字符可以切换时停止它(即,如果遇到不可逆的字符串):

模式(字符串)
    如果字符串长度 < 2 返回字符串
    else reverse = pattern(除了字符串的第一个字符之外的所有字符)
                   +(字符串的第一个字符)
    返回反向
于 2013-03-14T00:36:16.590 回答
0

要使用递归,您必须首先检查您的参数并决定是否应该使用递归。如果您的参数建议您应该使用递归,那么您应该使用带有新参数的递归,否则您应该返回结果。

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

于 2013-03-14T00:26:12.720 回答
0

以下是您可以如何考虑此问题的方法:

  1. 如果字符串为空,则返回一个空字符串。

  2. 否则,删除字符串的第一个字符(我们将其命名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;
  }
于 2013-03-14T00:29:37.397 回答
0

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

这是一个示例,说明您如何使用递归对从 1 到 100 的所有数字求和(这与您尝试做的很接近)。

int sumAllNumbers(int actualNumber, int limit)
{
   if (actualNumber < limit) return sumAllNumbers(actualNumber + 1, limit) + actualNumber;
   return actualNumber;
}

如果您了解它的工作原理,我想您可以弄清楚如何使用递归函数来反转字符串。你必须记住的主要事情是你必须有一个条件来停止递归。

于 2013-03-14T00:35:58.103 回答