是否有任何理由选择迭代算法而不是递归算法

时间:2014-01-22 05:28:28

标签: algorithm recursion iteration breadth-first-search

我更习惯于在迭代方法上实现递归方法。在考试时,我使用队列实现了递归BFS(广度优先搜索),但在线搜索使用队列的递归BFS时,我继续读到BFS是迭代算法而不是递归算法。那么有没有理由选择其中一个呢?

3 个答案:

答案 0 :(得分:2)

迭代对计算机更有效。递归对程序员来说更有效,而且更优雅(也许)。

递归的问题是每次递归调用都会将状态/帧推送到调用堆栈,这会导致资源耗尽(堆栈溢出!)以进行深度递归。但是,解决方案通常更容易编码和阅读。

迭代执行得更好,因为它都是在本地帧中完成的。但是,由于引入了变量以适应算法的进展,将递归转换为迭代会降低可读性。

选择最容易编码和维护的实现。只有在遇到问题时才会担心。

答案 1 :(得分:0)

迭代实现通常更快。斐波那契系列就是一个例子。通过递归解决方案在一个简单的循环中实现它会更快。

此处更多讨论Recursion or Iteration?

答案 2 :(得分:0)

迭代和递归都具有相同的时间复杂度。差别是:递归程序需要更多内存,因为每个递归调用将程序状态推入堆栈并且可能发生堆栈溢出。但是递归代码易于编写和管理。您可以减少使用tail recursion进行递归程序的空间复杂度。