【问题标题】:Are there any reason to choose iterative algorithms over recursive ones是否有任何理由选择迭代算法而不是递归算法
【发布时间】:2014-02-12 00:55:05
【问题描述】:
我更喜欢实现递归方法而不是迭代方法。在准备考试时,我使用队列实现了递归 BFS(广度优先搜索),但是在在线搜索使用队列的递归 BFS 时,我一直在阅读 BFS 是一种迭代算法而不是递归算法。那么有什么理由选择一个而不是另一个?
【问题讨论】:
标签:
algorithm
recursion
iteration
breadth-first-search
【解决方案1】:
迭代对计算机来说效率更高。递归对程序员来说效率更高,也更优雅(也许)。
递归的问题是每个递归调用都会将状态/帧推送到调用堆栈上,这会很快导致深度递归的资源耗尽(堆栈溢出!)。但是,解决方案通常更易于编码和阅读。
迭代性能更好,因为它都是在本地框架中完成的。但是,将递归转换为迭代可能会降低可读性,因为会引入变量以适应算法的进展。
选择最容易编码和维护的任何实现。仅当您有明显的问题时才担心。
【解决方案2】:
迭代和递归都具有相同的时间复杂度。区别在于:递归程序需要更多的内存,因为每次递归调用都会将程序的状态压入堆栈并可能发生堆栈溢出。但是递归代码易于编写和管理。您可以减少使用tail recursion的递归程序的空间复杂度。