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

时间:2011-09-01 00:05:21

标签: 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) == ch)
        return charPos;
    else
        return charPos + rIndexOf(ch, charPos + 1);
}

我似乎得到完全错误的值,所以我只能想象它是增量或计数的问题,但是我的代码每次都不会将charPos增加+1吗?或者它与字符的ASCII值有关吗?

此外,我想知道是否有必要使用“charPos = fromPos”这一行。我可以在整个代码中使用fromPos,还是会违反“传递参考而非价值”的事情?

3 个答案:

答案 0 :(得分:6)

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

目前还不清楚为什么你的最终返回语句 charPos添加到递归调用的返回值。为什么不呢:

return rIndexOf(ch, charPos + 1);

?毕竟,假设它在第3位找到它 - 那将返回3,所以你不想在前一次调用中将3添加到3,然后在5中加1,最后以6 ...

答案 1 :(得分:3)

这一行:

return charPos + rIndexOf(ch, charPos + 1);

有缺陷。假设myString是“太阳”,你打电话给rIndexOf(' ', 0);然后你最终得到:

0 + 1 + 2 + 3而不是3.因为charPos每次都会增加并将其添加到自身。您应该将该行更改为:

return rIndexOf(ch, charPos + 1);

答案 2 :(得分:2)

你的最后一行是错的,试试这个?

return rIndexOf(ch, charPos + 1)

另外,这将在内存中创建一个巨大的堆栈,效率不高。