使用递归语法的Palindrome的StackOverflow错误

时间:2014-12-15 04:22:54

标签: methods palindrome stack-overflow

我正在制作一个使用递归语法检查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!");
        }

2 个答案:

答案 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))
  }

关键点是:

  1. 对于递归算法,您不能使用相同的参数(例如

    )将完全相同的函数置于其中
     check(s){
         check(s)
     }
    
  2. 这将导致溢出;

    1. 您必须从内循环向外循环返回一些内容。希望这会有所帮助。