Java 我能';我不明白为什么这个递归是';行不通
我正在学习递归,但还没有完全掌握它。所以在这里我试图做一个关于递归的赋值,但是我被卡住了 在这个作业中,我应该要求用户输入短语,程序会确定它是否是回文。我们应该使用递归来完成这个任务 这是递归的部分,我不太明白如何处理它,因为当我运行它时,我没有得到任何错误,但它总是被认为是错误的 我正在使用Java 我能';我不明白为什么这个递归是';行不通,java,oop,recursion,input,Java,Oop,Recursion,Input,我正在学习递归,但还没有完全掌握它。所以在这里我试图做一个关于递归的赋值,但是我被卡住了 在这个作业中,我应该要求用户输入短语,程序会确定它是否是回文。我们应该使用递归来完成这个任务 这是递归的部分,我不太明白如何处理它,因为当我运行它时,我没有得到任何错误,但它总是被认为是错误的 我正在使用ArrayList保存所有用户输入 这是我现在掌握的密码 //instance variables private boolean det; private String input; private St
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;
}
据我所知,您从未将
inputHelp
设置为空字符串以外的任何内容,并且传入方法的字符串b
在任何地方都不会使用
因此,该方法永远不会调用自身,即使它调用了,传入的值也不会用于任何东西,从而使递归无效。有三个错误。首先,请注意:第二个参数是结束索引“exlusive”。其次,需要使用递归调用的结果。最后(正如评论中正确指出的那样),您应该考虑具有奇数字母计数的回文(第一个条件):
if(inputHelp.length())此解决方案(第二个)完全错误。但它可能是StackOverflow的合适解决方案,因为这正是您的代码要做的。好的,修复了一个问题。如果原始字符串是奇数长度的回文,仍然会失败。@ajb感谢您的评论(即使这段代码并没有像您所说的那样“完全”产生堆栈溢出:)。奇数长度的调用很好-也解决了这个问题。谢谢大家,真的很感谢你们的帮助!:DRecursive方法通常不应该使用全局变量或实例变量来完成它们的工作,至少在您更好地理解递归之前是这样的。当一个方法调用自身,并且第二个调用修改了一个全局变量或实例变量时,它会影响第一个调用的工作方式简单的递归方法(就像你在课堂上看到的那种)应该只使用它们的参数和局部变量。
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;
}