[英]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.