我正在学习递归,我还没有完全掌握它。所以在这里我试图做一个关于递归的任务但是我被卡住了。
在这项任务中,我应该要求用户输入短语,并且程序确定它是否是回文。我们应该使用递归来完成这项任务。
这是带递归的部分,我无法弄清楚如何处理它,因为当我运行它时,我没有得到任何错误,但它总是出现错误。
我正在使用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;
}
答案 0 :(得分:1)
有三个错误。首先,请注意substring
documentation:第二个参数是结束索引" exlusive"。其次,您需要使用递归调用的结果。最后(正如评论中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;
}
可以进行进一步的改进 - 线条似乎仍然很长,尤其是第二种情况(留给读者的练习;)。
答案 1 :(得分:0)
据我所知,您永远不会将inputHelp
设置为空字符串以外的任何内容,并且传递给您的方法的字符串b
不会在任何地方使用。
因此该方法永远不会回调自身,即使它传入的值也不会用于任何事情,导致递归无用。