java - 如何将递归转化为迭代?

标签 java recursion iteration

关闭。这个问题需要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/

相关文章:

python - 在迭代其元素时更新集合

java - 如何在带有 set 的参数上使用 hibernate 搜索条件

java - 如何在 GCM Java Message Builder 中设置 BigTextStyle

java - 如何修复此递归 StackOverFlowException 错误?

python - 如何让这段代码更有效地处理大输入?

c# - 使用索引迭代 C# 字典的键?

java - 在支持 bean (SEAM) 中启用 hibernate 过滤器

java - 下载后过期的临时 URL

python - 在python中制作递归函数

java - 检查列表内对象值之间是否相等的优化方法