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