簡體   English   中英

有人可以改進Java中indexOf的遞歸實現嗎?

[英]Can someone improve the recursive implementation of indexOf in Java?

我一直致力於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,還是會違反“傳遞引用而非價值”的事情?

絕對可以在代碼中使用fromPos Java從未通過引用傳遞,您甚至無法改變charPos的值。

目前還不清楚為什么你的最終return語句 charPos 添加到遞歸調用的返回值。 為什么不呢:

return rIndexOf(ch, charPos + 1);

畢竟,假設它在第3位找到它 - 那將返回3,所以你不想在前一次調用中將3添加到3,然后在5中加1,最后以6 ...

這一行:

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

是有缺陷的。 假設myString是“太陽”,你調用rIndexOf(' ', 0); 然后你最終得到:

0 + 1 + 2 + 3而不是3.因為charPos每次都會遞增並將其添加到自身。 您應該將該行更改為:

return rIndexOf(ch, charPos + 1);

你的最后一行是錯的,試試這個?

return rIndexOf(ch, charPos + 1)

另外,這將在內存中創建一個巨大的堆棧,效率不高。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM