我如何使用递归?

时间:2013-03-14 00:22:13

标签: java recursion

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

我正在寻找解释,以帮助我更好地完成此任务所需的代码。 我在Eclipse上使用Java

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

以下是您如何考虑这个问题:

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

  2. 否则,删除字符串的第一个字符(我们将其命名为c)并在剩余部分调用reverse(我们称之为cs)然后追加{{1 }} 到最后。

  3. 这是一些伪代码(这不会编译,只是为了给你一个想法):

    c

答案 3 :(得分:0)

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

以下是一个示例,说明如何使用递归来汇总从1到100的所有数字(它接近你要做的事情)。

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

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