深度优先搜索递归或迭代

时间:2017-04-21 22:13:19

标签: algorithm recursion depth-first-search

我正在研究深度优先搜索,他的递归版本实现起来非常简单。使用稍微复杂的实现,可以使用堆栈来实现非递归版本。

递归与非递归版本的优缺点是什么?在我的简单测试案例中,我看不出任何统计上显着的时序差异。

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

1 个答案:

答案 0 :(得分:1)

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

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

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