回文功能的递归

时间:2012-01-17 16:55:11

标签: java recursion palindrome

任何人都可以帮我弄清楚我的isPalindrome(int)函数出了什么问题?

基本上这个函数检查一个数字是否是回文,我想完成 这是通过递归。在函数内调用isPalindrome(int)时会出现一些问题。这给我带来了很多麻烦。谢谢!

public boolean isPalindrome(int num) {
    String s = Integer.toString(num);
    if( s.length() == 1 ) {
    return true;
}
if( s.length() == 2 && s.charAt(0) == s.charAt(1) ) {
    return true;
}
if( s.length() > 2 ) {
    if(s.charAt(0) == s.charAt(s.length()-1))
        s = s.substring(1, s.length()-1);
        **isPalindrome(Integer.parseInt(s));**
}
return false;
}

5 个答案:

答案 0 :(得分:2)

在代码的这一部分

       if(s.charAt(0) == s.charAt(s.length()-1))
         s = s.substring(1, s.length()-1);
        **isPalindrome(Integer.parseInt(s));**

当第一个和最后一个字符不相等时,您没有给出其他条件。 当它们不相等时你应该返回false。还有'返回' isPalindrome(Integer.parseInt(s)),否则最后一次返回将在执行函数后执行。

     if(s.charAt(0) == s.charAt(s.length()-1)) {
         s = s.substring(1, s.length()-2);
         return isPalindrome(Integer.parseInt(s));
     } else {
       false;
     }

答案 1 :(得分:1)

你应该return isPalindrome(Integer.parseInt(s));,而不仅仅是调用它。

如果你不这样做,当你从递归中回来时,无论返回的递归调用是什么,你都会退出最后if的范围和return false

答案 2 :(得分:0)

您需要s.Length()-2,而不是s.Length()-1

此外,您可以将首次true测试更改为<= 1,并删除length == 2的特殊情况。

答案 3 :(得分:0)

听起来像[homework]您可以通过在调试器中单步执行代码来查看问题,但是您遇到的一个问题是isPalindrome返回的值将被忽略。

您遇到的另一个问题是,数字前半部分的0会被忽略。这是因为您将字符串转换为int并返回字符串,因此1020321似乎是一个回文。

顺便说一下:这个问题之前已被问过很多次了。您是否将自己的答案与网络上的其他人进行了比较?

答案 4 :(得分:0)

public class Recursion {
    public static String Palindrome(int length)
        {
        //Alphabet to pick letters from
        String alpha="abcdefghijklmnopqrstuvwxyz";
        String s="";
        String sBackwards=" ";
        if(length==0) {
            sBackwards+=reverse(s);
            return sBackwards;
            //recursion over-rides sBackwards
        } else {
            Random r = new Random();
            //places a char from alpha into s
            s+=(alpha.charAt((int)r.nextInt(26)));
            System.out.print(s);
            return Palindrome(length-1); //recursion
        }
    }
    public static void main(String args[])
    {
        System.out.println(Palindrome(10));
    }
}