关闭。这个问题需要debugging details .它目前不接受答案。
想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。
10 个月前关闭。
Improve this question
我得到了一个可怕的 stackoverflowerror,并认为这是我的深度递归导致的(好吧,调试器帮助解决了这个问题......)。谁能指导我将递归变成循环?
H<V>.Pair currPair = (H<V>.Pair) arr[startPos];
if (arr[startPos] == null) {
return null;
}
if (currPair.key.equals(key)) {
return currPair.value;
} else {
return find(gNL(startPos, ++stepNum, key), key, stepNum);
}
}
更具体地说,return find(getNextLocation(startPos, ++stepNum, key), key, stepNum);
导致递归。
最佳答案
这似乎是等价的:
private V find(int startPos, String key, int stepNum) {
Hashtable<V>.Pair p;
boolean finished = false;
do {
p = (Hashtable<V>.Pair) arr[startPos];
if (p == null || p.key.equals(key)) {
finished = true;
} else {
startPos = getNextLocation(startPos, ++stepNum, key);
}
} while( ! finished);
return p == null ? null : p.value;
}
关于java - 如何将递归转化为迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65062333/