我正在读这本书,计算机程序的结构和解释,其中讲述了递归过程和递归过程之间的区别,以及迭代过程和迭代过程之间的区别。因此,递归过程仍然可以生成迭代过程。
我的问题是:给定一个生成递归过程的过程,你是否总能编写另一个实现相同结果但产生迭代过程的过程?
我试图解决的具体问题是编写一个过程,该过程对二叉搜索树进行有序遍历,但会生成迭代过程。我知道如何使用堆栈来解决此问题的迭代过程。但是,这仍然会产生一个递归过程(如果我错了,请纠正我)。
谢谢,
阿比纳夫。
答案 0 :(得分:4)
使用线性迭代过程(例如,树递归,无法转换为尾递归)无法解决某些任务。您必须使用平台内置的堆栈,或者在语言中自行重新创建堆栈(通常是效率低得多且更加丑陋的解决方案)。 因此,如果将'recursion'定义为'使用堆栈来存储相同代码的不同调用',则是,有时绝对需要递归。
如果你将'recursion'定义为'我的语言中的一个函数(最终)调用自身',那么你可以通过自己重新实现递归来实现无需显式递归,如上所述。这仅在您的语言不提供递归过程,或者没有足够的堆栈空间或具有类似限制时才有用。 (例如,早期的Fortran没有递归过程。当然,他们也没有动态数据结构来模拟它们!就个人而言,我从未遇到过实现伪递归的实际例子。正确的解决方案。)
答案 1 :(得分:3)
答案 2 :(得分:3)
任何尾递归过程都可以转换为迭代过程。
但并非所有递归过程都可以转换为迭代过程。