2014-12-15 2 views
0

Я делаю программу, которая проверяет наличие палиндрома с использованием рекурсивного синтаксиса. К сожалению, он продолжает генерировать ошибку во время выполнения, которая говорит «Ошибка stackOverFlow», и хотя я провел исследование, я не могу понять, почему это происходит. Это метод, который в настоящее время проходит ремонт.Ошибка StackOverflow для Palindrome с использованием рекурсивного синтаксиса

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

Int n - числовое значение длины строки, которую я получаю от основного. – user3466743

ответ

0

Дополняя точка Ransom, в сравнение

s.charAt(n-1) == s1.charAt(n-1) 

всегда возвращает истину.

Попытка построить рекурсивный алгоритм, как это:

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

Это приведет к переполнению;

  1. Вы должны вернуть что-то из внутреннего контура во внешний цикл. Надеюсь это поможет.
1

Для завершения рекурсивного алгоритма внутренний вызов должен быть проще, чем исходный вызов. В этом случае ваш рекурсивный вызов равен check(s, n), которые являются точными параметрами, с которыми вы были вызваны. Это приведет к бесконечной рекурсии.

Как правило, рекурсивная функция также вернет что-то.

+0

О, боже мой, неудивительно! Я даже не рассматривал это как причину бесконечности! СПАСИБО БОЛЬШОЕ. – user3466743

Смежные вопросы