将for循环重写为递归方法?

时间:2016-03-10 00:42:19

标签: java for-loop recursion

我无法将以下代码重写为递归方法而不是使用for循环。 for循环测试以查看字符串'noSpaces'是否是回文(向前和向后相同)。 noSpaces字符串没有标点符号,空格或大小写的差异。

感谢您的帮助

    public boolean isRegularPalindrome(String noSpaces) {
    noSpaces = noSpaces.toUpperCase();
    String[] letters = new String[noSpaces.length()];
    for (int i = 0; i < letters.length; i++) {
        letters[i] = Character.toString(noSpaces.charAt(i));
    }

    for (int i = 0; i < letters.length / 2; i++) {
        if (!letters[i].equals(letters[letters.length - i - 1])) {
            return false;
        }
    }
    return true;
}

2 个答案:

答案 0 :(得分:2)

为任何事情编写递归算法都需要基本情况​​。对于回文,这将是一个长度为0或长度为1的字符串 - 如果字符串的长度为0或1,则为回文结构。
如果不满足基本情况,则检查最后一个字符的第一个字符 如果字符不相同,则返回false 如果字符相同,则将递归调用返回给字符串,但第一个和最后一个字符除外 代码看起来应该是这样的。

public boolean isPalindrome(string str){
if (str.length == 0)
    return true;
else if (str.length == 1)
    return true;
else if(str.charAt(0) != str.charAt(str.length - 1)
    return false;
else
    return isPalindrome(str.substring(1, length - 1));
}

答案 1 :(得分:1)

你去了:

DUMP_IDX=`grep -n 'Full thread' logs/catalina.out | tail -1 | cut -d':' -f1`
sed -n $DUMP_IDX,1000000000000000000p logs/catalina.out > jstack-kill-thread-dump-0309.tdump