有人能改进Java中indexOf的递归实现吗?

有人能改进Java中indexOf的递归实现吗?,java,recursion,Java,Recursion,我一直在做一个Java夏季作业,在Java中递归实现indexOf方法时出现了一个问题。以下是我到目前为止的情况: public int rIndexOf(char ch, int fromPos) { int charPos = fromPos; if (charPos >= myString.length() || myString.equals("")) return -1; else if (myString.charAt(charPos)

我一直在做一个Java夏季作业,在Java中递归实现indexOf方法时出现了一个问题。以下是我到目前为止的情况:

public int rIndexOf(char ch, int fromPos)
{
    int charPos = fromPos;

    if (charPos >= myString.length() || myString.equals(""))
        return -1;
    else if (myString.charAt(charPos) == ch)
        return charPos;
    else
        return charPos + rIndexOf(ch, charPos + 1);
}
我似乎得到的值是完全错误的,所以我只能想象这是递增或计数的问题,但我的代码不是每次递增charPos+1吗?还是与字符的ASCII值有关


我还想知道“charPos=fromPos”一行是否有必要。我可能只是在我的代码中使用了fromPos,或者这违反了“传递引用而不是值”的规定吗?

您的最后一行是错误的,试试这个

return rIndexOf(ch, charPos + 1)
此外,这将在内存中创建一个巨大的堆栈,效率不高。

您完全可以在代码中一直使用
fromPos
。Java从未通过引用传递,而且您甚至没有更改
charPos
的值

不清楚为什么您的最终return语句会将
charPos
添加到递归调用的返回值中。为什么不只是:

return rIndexOf(ch, charPos + 1);
??毕竟,假设它在位置3处找到它-这将返回3,因此您不希望在上一次调用中向3添加2,然后向5添加1,最后得到6…

此行:

return charPos + rIndexOf(ch, charPos + 1);
这是有缺陷的。假设myString是“太阳”,您可以调用
rIndexOf(“”,0)然后您将得到:

0+1+2+3
而不是3。因为charPos每次递增,并且您将其添加到自身中。您只需将该行更改为:

return rIndexOf(ch, charPos + 1);

您是否尝试过在调试器中单步执行代码,以查看其行为与您预期的不同?为什么
返回charPos+rIndexOf(ch,charPos+1)
?您只需要
返回rIndexOf(ch,charPos+1)
。如果获得字符串的剩余长度并将其拆分为两半,然后调用递归,直到找到(或未找到)所需的字符,那么此实现不是很有效吗?你所做的一切都是以1递增并调用递归,我不认为通过递归做这件事有什么好处,只是说你使用了递归。通过递归找到更快的速度不是很重要吗?@Ali:你是在说线程吗?不,不是线程,但我考虑的是这种情况下的时间复杂度,与你的算法相同n倍,与简单地查看每个字符相同,所以。。。不要理会我的评论。哦,哇,那太尴尬了,谢谢。所以我一直在一遍又一遍地添加charPos,我想这个任务的原因是为了了解当你再次出现时会发生什么,而不是效率。:-)