【问题标题】:Are there any reason to choose iterative algorithms over recursive ones是否有任何理由选择迭代算法而不是递归算法
【发布时间】:2014-02-12 00:55:05
【问题描述】:

我更喜欢实现递归方法而不是迭代方法。在准备考试时,我使用队列实现了递归 BFS(广度优先搜索),但是在在线搜索使用队列的递归 BFS 时,我一直在阅读 BFS 是一种迭代算法而不是递归算法。那么有什么理由选择一个而不是另一个?

【问题讨论】:

  • 堆栈溢出。无法抗拒:D
  • ^lol.Yup,可能会让人头疼。

标签: algorithm recursion iteration breadth-first-search


【解决方案1】:

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

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

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

选择最容易编码和维护的任何实现。仅当您有明显的问题时才担心。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢你,特别是关于尾递归的额外信息。
    【解决方案3】:

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

    更多讨论在这里Recursion or Iteration?

    【讨论】:

      猜你喜欢
      • 2017-12-07
      • 1970-01-01
      • 2011-02-08
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 2015-09-20
      相关资源
      最近更新 更多