深度优先搜索递归或迭代
depth first search recursive or iterative
我正在研究深度优先搜索,他的递归版本很容易实现。稍微复杂一点的实现,可以用栈实现非递归版本
递归版本与非递归版本的优缺点是什么?在我的简单测试用例中,我看不到任何具有统计意义的时间差异。
我能想到的一个问题是递归情况可能会以堆栈溢出错误结束。那么是否有任何理由使用递归实现?
你在学校看到很多递归 DFS,但在编写软件的现实生活中,你应该永远不要使用递归,除非你知道它会被限制在一个合理的深度。
通常这意味着深度限制为 O(log N),例如递归 DFS 在 平衡 树中很好,或者您从问题域中知道非常深度递归不会发生,例如在递归下降解析中递归到嵌套语法级别。
堆栈溢出是一个灾难性的错误,所以如果你不确定深度是否有限,那么你应该做(很少,真的)额外的工作并在堆栈上编写迭代版本堆.
我正在研究深度优先搜索,他的递归版本很容易实现。稍微复杂一点的实现,可以用栈实现非递归版本
递归版本与非递归版本的优缺点是什么?在我的简单测试用例中,我看不到任何具有统计意义的时间差异。
我能想到的一个问题是递归情况可能会以堆栈溢出错误结束。那么是否有任何理由使用递归实现?
你在学校看到很多递归 DFS,但在编写软件的现实生活中,你应该永远不要使用递归,除非你知道它会被限制在一个合理的深度。
通常这意味着深度限制为 O(log N),例如递归 DFS 在 平衡 树中很好,或者您从问题域中知道非常深度递归不会发生,例如在递归下降解析中递归到嵌套语法级别。
堆栈溢出是一个灾难性的错误,所以如果你不确定深度是否有限,那么你应该做(很少,真的)额外的工作并在堆栈上编写迭代版本堆.