因此,对于本周末的家庭作业,我们正在学习递归,这意味着可怕的字符串反转与递归问题。我有一段简单的代码正确执行递归(根据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));
}
我一直在尝试谷歌 - 我的方式来弄清楚为什么,但我不能,大多数网站解释递归与几乎我写的实际逆转的代码字符串,但似乎没有处理任何打印它的问题。老实说,我不知道我忽略了什么,在这里呆了几个小时,觉得我的头撞在了墙上。
答案 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));
不会破坏它。学习递归的逻辑和概念更为重要。保持积极态度!