Java N-回文问题,需要确定第二个终止案例

Java N-回文问题,需要确定第二个终止案例,java,recursion,palindrome,Java,Recursion,Palindrome,此递归方法根据n的值查找字符串的回文。其中n是每次比较的字符数 如果n是2,那么“abab”是回文,因为ab和ab public static boolean nDrome(String s, int n) { if(s.isEmpty()) return true; else if( s.length() == 3 ) return true; else { if(s.substring(

此递归方法根据n的值查找字符串的回文。其中n是每次比较的字符数 如果n是2,那么“abab”是回文,因为ab和ab

public static boolean nDrome(String s, int n)
{
      if(s.isEmpty())
         return true;
      else if( s.length() == 3 )
         return true;
      else
      {  
         if(s.substring(0,n).equals( s.substring(s.length()-n) ) )
            return nDrome( s.substring(n, s.length()-n), n);
         else
         return false;
      }
   }
问题在于我的第二个if语句。 让我们考虑例如:

nDrome(“abcdefgcdab”,2)

这是一个回文,因为 AB,CD,EFG,CD,AB


请注意中间项是如何不计算的,因此在本例中,代码是有效的,因为if中有一个硬编码值3。现在,如果我改变n值,它将不再正常工作。如何确定第二个if语句的值?

@ElliottFrisch但在n=1的情况下,您不知道长度是多少吗?它会从一开始就返回true“注意中间项如何不起作用”您如何定义“中间项”使其不起作用?什么使它“不算数”?换一种方式问,N回文的定义是什么?我似乎找不到与您正在做的事情相匹配的定义。@Andreas因为没有其他值可与之比较,所以中间项根本不算数,所以本例中的中间项由3个字符组成。n是2。3-n会给你1,这是不够的比较。比较必须是一对n个字符与另一对n个字符的比较。希望有帮助@另一个例子是经典的“赛车”。nDrome(“赛车”,1)。被比较的项是r和r,a和a,c和c,但现在你只剩下“e”,这是本例中的中间项。因此,如果中间项的长度小于2*n,那么可以忽略它?在您的示例中,可以忽略3长度的中间项,但2长度或1长度的中间项也可以忽略?若否,原因为何?