algorithm - 深度优先搜索递归或迭代

标签 algorithm recursion depth-first-search

我正在研究深度优先搜索,他的递归版本很容易实现。稍微复杂一点的实现,可以用栈来实现非递归版本。

递归版本与非递归版本的优缺点是什么?在我的简单测试用例中,我看不到任何具有统计意义的时间差异。

我能想到的一个问题是递归情况可能会以堆栈溢出错误结束。那么有没有理由使用递归实现呢?

最佳答案

你在学校看到很多递归 DFS,但在编写软件的现实生活中,你不应该永远使用递归,除非你知道它会被限制在一个合理的深度。

通常这意味着深度限制为 O(log N),例如递归 DFS 在平衡树中很好,或者您从问题领域知道非常深的递归不会发生,例如在递归下降解析中递归到嵌套语法级别。

堆栈溢出是一个灾难性的错误,所以如果您不确定深度是否有限,那么您应该做(很少,真的)额外的工作,并在堆上编写堆栈的迭代版本。

关于algorithm - 深度优先搜索递归或迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43552770/

相关文章:

用于交互式可视化的算法,如传播、大小调整、物理等

c++ - 我将如何优化这段代码?

javascript - 如何使用递归转置 m*n 矩阵?

c++ - 在无向树中寻找最长路径

c++ - Boost DFS如何保存访问过的顶点?

python - 将(例如)8 更改为 08...python

检查是否可以通过连接较小的字符串来制作字符串

python - 我应该如何调用在主函数之外定义的函数?

Haskell 子集递归

Python DFS,无法弄清楚为什么如果使用 append/pop() 返回列表为空但在递归调用中适用于 []+[]