我正在尝试按照这里提供的二叉树示例进行工作:http://cslibrary.stanford.edu/110/BinaryTrees.html。这些示例都通过递归解决问题,我想知道我们是否可以为它们提供迭代解决方案,也就是说,我们是否总是能够确定可以通过递归解决的问题也有迭代解决方案。如果不行,我们可以举什么样的例子来说明只能通过递归/迭代解决的问题?
在计算机上迭代和递归之间唯一的区别是你使用内置的栈或用户定义的栈,因此它们是等效的。
根据我的经验,大部分递归解法都可以用迭代的方式来解决。
这也是一种不错的技巧,因为递归解法可能会占用过多的内存和CPU资源。
递归和迭代是两个工具,在非常基本的层面上做相同的事情:在一组定义好的值上执行重复的操作。它们是可以互换使用的,因为没有一个问题不能通过其中之一来解决。但这并不意味着,一个比另一个更加适合。
递归具有在没有已知结束的情况下继续执行的优点。这个优点在调整和线程化的快速排序中体现得淋漓尽致。
虽然你不能生成额外的循环,但是你可以通过递归生成新的线程。
需要注意的一件事是作者提到了递归下降法的调用栈溢出问题。迭代、基于栈的实现可以更有效地使用资源。