与字符串递归基本案例混淆(Java)

时间:2014-04-12 02:19:58

标签: java recursion

因此,对于本周末的家庭作业,我们正在学习递归,这意味着可怕的字符串反转与递归问题。我有一段简单的代码正确执行递归(根据eclipse中的调试模式),但是因为(这是我感到困惑的地方)我从一个不同的区域调用它程序,它只是无限地继续前进,直到它崩溃或溢出或其所谓的。

public static void main(String[] args) 
{
    System.out.println(reversePrint("Hello"));
}

public static String reversePrint(String s)
{
    if (s.length() <= 1)
        return s;

    return reversePrint(s.substring(1) + s.charAt(0));
}

我一直在尝试谷歌 - 我的方式来弄清楚为什么,但我不能,大多数网站解释递归与几乎我写的实际逆转的代码字符串,但似乎没有处理任何打印它的问题。老实说,我不知道我忽略了什么,在这里呆了几个小时,觉得我的头撞在了墙上。

3 个答案:

答案 0 :(得分:3)

试试这个:

public static String reversePrint(String s) {
    if (s.length() <= 1)
        return s;
    return reversePrint(s.substring(1)) + s.charAt(0);
}

以下是您的代码中的问题:

reversePrint(s.substring(1) + s.charAt(0))

您一直使用相同大小的字符串调用reversePrint()方法 - 如您所知,递归必须&#34;减少&#34;每一步的问题,直到碰到基本情况,否则它永远不会结束。

答案 1 :(得分:1)

如果您使用reversePrint(s.substring(1) + s.charAt(0)),则始终将完整字符串传递给reversePrint

您应确保传递给reversePrint的字符串始终变小:

reversePrint(s.substring(1)) + s.charAt(0);

请注意我传递给reversePrint的内容是一个小于s的字符。

答案 2 :(得分:0)

我现在也在课堂上学习递归,重要的部分是要记住基本案例和逻辑上迭代的正确方法调用。像括号一样的简单语法错误:

return reversePrint(s.substring(1) + s.charAt(0));

不会破坏它。学习递归的逻辑和概念更为重要。保持积极态度!