繁体   English   中英

我不知道为什么此递归不起作用

[英]I can't figure out why this Recursion isn't working

我正在学习递归,但还没有完全掌握。 所以在这里我试图做一个递归作业,但是我被卡住了。

在本次作业中,我要求用户输入短语,然后程序确定它是否是回文。 我们应该使用递归来完成此任务。

这是递归的部分,我不太清楚如何解决它,因为当我运行它时,没有任何错误,但总是出现错误。

我正在使用ArrayList保留所有用户输入。

这是我现在得到的代码

//instance variables
private boolean det;
private String input;
private String inputHelp;

//constructor
public RecursivePalindrome(String i)
{
    det = false;
    input = i;
    inputHelp = "";
}

//determines if the method is a palindrome or not using recursions
public boolean palindrome(String b)
{

    if(inputHelp.length() == 0)
    {
        det = true;
    }
    if(inputHelp.substring( 0 , 1 ).equals(inputHelp.substring( inputHelp.length() )))
    {
        inputHelp = inputHelp.substring( 1, inputHelp.length());
        palindrome(inputHelp);
    }
    else 
    {
        det = false;
    }
    return det;
}

有三个错误。 首先,请注意substring文档 :第二个参数是结束索引“排他”。 其次,您需要使用递归调用的结果。 最后(如ajb在评论中正确指出的那样),您应该用奇数字母(第一个条件)说明回文:

if (inputHelp.length() <= 1)
{
    det = true;
}
else if (inputHelp.substring(0, 1)
             .equals(inputHelp.substring(inputHelp.length() - 1)))
{
    inputHelp = inputHelp.substring( 1, inputHelp.length() - 1);
    det = palindrome(inputHelp);
}
else 
{
    det = false;
}

此外,您可以使其更具可读性:

public boolean palindrome(String b)
{
    if (b.length() <= 1)
    {
        return true;
    }

    if (b.substring(0, 1)
           .equals(b.substring(b.length() - 1)))
    {
        return palindrome(b.substring(1, b.length() - 1));
    }

    return false;
}

可以进行进一步的改进-行似乎仍然很长,尤其是第二种情况(留给读者练习;)。

据我所知,您绝不inputHelp设置为空字符串以外的任何东西,并且传递给您的方法的字符串b不会在任何地方使用。

因此,该方法将永远不会对其自身进行回调,即使这样做了,传入的值也不会用于任何事情,从而使递归无效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM