【发布时间】:2021-03-11 22:27:10
【问题描述】:
我得到一个堆栈溢出错误,因为我的递归创建了一个无限循环。将方法转换为迭代会阻止这种情况,但我不知道如何!
谁能指导我将递归变成循环?
private int findEmpty(int startPos, int stepNum, String key) {
if (arr[startPos] == null) {
return startPos;
}
return findEmpty(getNextLocation(startPos, ++stepNum, key), stepNum, key);
}
具体是return findEmpty(getNextLocation(startPos, ++stepNum, key), stepNum, key); 导致错误!
【问题讨论】:
-
如果您的递归代码无限递归,那么它的迭代版本也会如此。
-
我怀疑问题实际上出在
getNextLocation,所以如果没有看到该代码,我们就无法诊断问题。我怀疑以下不是你的问题,但看起来你正在以一种你意想不到的方式使用++stepNum;按照您的方式,stepNum在每次迭代中都是相同的,并且在getNextLocation内部是stepNum+1。 -
你昨天问了一个几乎相同的问题。它甚至没有关闭。你为什么放弃这个问题而问这个问题?
-
编辑不得使现有答案无效。如果需要,请提出新的后续问题,并附上此问题的链接!具体来说,您的revision 3 是一个很好的候选人;毫无疑问,它会吸引到具体的答案。较新的修订版询问完全不同的代码,因此值得另外发表一篇文章。 :)
-
我明白了,谢谢! @WillNess
标签: java arrays recursion iteration hashtable