gpt4 book ai didi

java - 我不明白为什么这个递归不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:41 24 4
gpt4 key购买 nike

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

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

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

我使用 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 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;
}

可以进行进一步的改进 - 行似乎仍然很长,尤其是第二个条件(留给读者作为练习;))。

关于java - 我不明白为什么这个递归不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22021205/

24 4 0
文章推荐: java - 使用信号量进行流量同步
文章推荐: html - 使
文章推荐: Python 逆向函数
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com