我正在制作一个使用递归语法检查Palindrome的程序。不幸的是,它继续产生一个运行时错误,说" stackOverFlow错误"虽然我已经做过研究,但我似乎无法理解它为什么会发生。这是目前正在修复的方法。
public static void check(String s, int n)
{
String s1 = s;
if(s.length() < 1)
{
System.out.println("This is always a palindrome");
ans = true;
}
else if(s.length() > 1)
{
if(s.charAt(n-1) == s1.charAt(n-1))
{
ans = true;
}
else
{
ans = false;
}
check(s, n);
}
if(ans == true)
{
System.out.println("This is a palindrome!");
}
else
{
System.out.println("This isn't a palindrome!");
}
答案 0 :(得分:1)
对于要终止的递归算法,内部调用必须比原始调用更简单。在这种情况下,您的递归调用是check(s, n)
,这是您调用的确切参数。这将导致无限递归。
通常,递归函数也会返回一些东西。
答案 1 :(得分:0)
补充赎金的观点,比较
s.charAt(n-1) == s1.charAt(n-1)
将始终返回true。
尝试构造这样的递归算法:
check(s){
// insert code: if length is 0 or 1, always return true;
if(s.chatAt(0) == s.charAt(s.length-1))
return check(s.subString(1,length-1))
}
关键点是:
对于递归算法,您不能使用相同的参数(例如
)将完全相同的函数置于其中 check(s){
check(s)
}
这将导致溢出;