作业 - 迭代到递归方法

时间:2013-04-03 22:50:23

标签: java recursion

我的老师要求我们创建两种方法来确定字符串是否是回文。 一个必须是一个递归方法,另一个必须是一个迭代方法,我已经找到了迭代版本,但我不知道如何使它成为一个递归方法。 欢迎任何和所有帮助。谢谢

static boolean isPalindrome(String s)
{
    String noSpaces = s.replaceAll("\\W", ""); //remove all non-word chars from string
    String revString = ""; //store reversed string 

    //for loop working from outter chars to inner
    //to reverse the string

    for(int i = 1; i <= noSpaces.length(); i++)
    {
        //if true add char to revString String 
        if(noSpaces.charAt(i - 1) == noSpaces.charAt(noSpaces.length() - i))
            revString = revString + noSpaces.charAt(i - 1);
    }

    //return true if original string matches reversed string
    if(noSpaces.equals(revString))
        return true;
    else
        return false;

}

3 个答案:

答案 0 :(得分:1)

创建一个带有字符串的递归方法,并返回类似迭代方法的布尔值。

  • 它将检查第一个和最后一个字符,如果它们不同则返回false

  • 如果它们是同一个调用并返回方法,并将第一个和最后一个字符作为参数取消

  • 如果是单个字符或空字符串,则返回true

关于迭代方法的提示:

  • 区分大小写是否重要?

  • 虽然你的方法是一种方法,但另一种方法只需要检查一半的字符串(不是从1noSpaces.length())。

答案 1 :(得分:1)

递归通过调用自身的方法工作。一个着名的递归示例是阶乘:n! = n * (n-1)!。递归有效,因为输入每次都会改变;如果没有,它基本上是一个占用内存并最终导致程序崩溃的无限循环。关于递归的最后一件事:有一点是答案是已知的,例如对于阶乘,0! = 1。递归方法需要给出这个已知值的答案,否则它将一直持续到它崩溃或抛出错误(因为被问到一个不可能的事情)。在你的例子中,你知道如果它有一个char或两个字符完全相同的东西是回文。

递归:你想要的方法是取一个String,执行replaceAll去除非单词字符,(添加一个.toLowerCase()),然后检查第一个和最后的字符,看看它们是否相同。如果是,则再次运行该方法,输入为noSpaces,并删除第一个和最后一个字符。但是,如果String的长度是&lt; = 3并且第一个和最后一个字符相同,那么您可以继续并返回true。如果你不添加它,当你试图删除不存在的字符时会出现错误(虽然有另一种方法)。

你的迭代方法很大,你可以减少它。你不需要检查所有的字符,只需要检查一半(如果你有奇数长度,那么1/2 + 1)。您也不需要复制String,而是在同一个String上使用两个charAt方法。

编辑:我删除了我的代码,因为这是作业。如果您真的需要查看它,请查看编辑历史记录

答案 2 :(得分:1)

试试这个:

public static boolean palindrome(String Str){
        if(Str.length()<=0)
            return true;
        if(Str.charAt(0)!=Str.charAt(Str.length()-1))
            return false;
        else
            return palindrome(Str.substring(1,Str.length()-1));
    }