**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
18天前关门了。
改进这个问题
我得到了一个可怕的StackOverflower错误,并认为是我的深层递归造成的(好吧,调试器帮助了……)。有人能指导我把递归变成循环吗?
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);
导致递归。
2条答案
按热度按时间5ktev3wc1#
我相信这能让你达到目的:
“技巧”是将用于结束递归的条件放入循环条件中。请注意,由于您的算法没有像其他递归算法那样以任何方式使用中间结果,因此转换非常简单。这并不是每次都适用于所有递归算法,有时需要添加一个数据结构来保存中间结果。
q5iwbnjs2#
这似乎相当于: