Algorithm 有什么理由选择迭代算法而不是递归算法吗

Algorithm 有什么理由选择迭代算法而不是递归算法吗,algorithm,recursion,iteration,breadth-first-search,Algorithm,Recursion,Iteration,Breadth First Search,与迭代方法相比,我更习惯于实现递归方法。在准备考试时,我使用队列实现了递归BFS(广度优先搜索),但在在线搜索使用队列的递归BFS时,我不断阅读BFS是一种迭代算法,而不是递归算法。那么有什么理由选择其中一个而不是另一个呢?迭代实现通常更快。斐波那契级数就是一个例子。在递归解决方案的简单循环中实现它会更快 这里的更多讨论迭代对计算机来说更有效。递归对程序员来说更有效,也更优雅(也许) 递归的问题是,每个递归调用都会将状态/帧推到调用堆栈上,这会很快导致深度递归的资源耗尽(堆栈溢出!)。但是,解决

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

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


这里的更多讨论

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

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

迭代执行得更好,因为它都是在局部框架中完成的。然而,将递归转换为迭代可以降低可读性,因为引入了变量以适应算法的发展


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

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

stackoverflow进行编程。无法抗拒:D^lol.Yup,可能是个麻烦。谢谢你,特别是关于尾部递归的额外信息。