我更习惯于在迭代方法上实现递归方法。在考试时,我使用队列实现了递归BFS(广度优先搜索),但在线搜索使用队列的递归BFS时,我继续读到BFS是迭代算法而不是递归算法。那么有没有理由选择其中一个呢?
答案 0 :(得分:2)
迭代对计算机更有效。递归对程序员来说更有效,而且更优雅(也许)。
递归的问题是每次递归调用都会将状态/帧推送到调用堆栈,这会导致资源耗尽(堆栈溢出!)以进行深度递归。但是,解决方案通常更容易编码和阅读。
迭代执行得更好,因为它都是在本地帧中完成的。但是,由于引入了变量以适应算法的进展,将递归转换为迭代会降低可读性。
选择最容易编码和维护的实现。只有在遇到问题时才会担心。
答案 1 :(得分:0)
迭代实现通常更快。斐波那契系列就是一个例子。通过递归解决方案在一个简单的循环中实现它会更快。
此处更多讨论Recursion or Iteration?
答案 2 :(得分:0)