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