递归与迭代

时间:2012-04-14 18:19:31

标签: algorithm recursion iteration

我相信所有具有迭代逻辑的问题都可以使用迭代来解决,但是我们可以使用递归来解决任何问题吗?递归总是可以替代迭代吗?如果可以,请提供答案证明。还假设我们有一个无限堆栈或我们在图灵机上运行程序。我不在乎这个证明是否是理论证据。 (这就是我提到图灵机的原因)

3 个答案:

答案 0 :(得分:7)

是的,递归总是可以替代迭代,这已经讨论过了before。引用链接帖子:

  

因为您可以使用严格的迭代结构和仅使用递归结构的转换完整语言来构建图灵完整语言,因此这两者是等价的。

解释一下:我们知道任何可计算的问题都可以通过图灵机来解决。并且可以在没有递归的情况下构造编程语言A,这相当于图灵机。同样,可以在没有迭代的情况下构建编程语言B,与图灵机的计算能力相等。

因此,如果AB都是Turing-complete,我们可以得出结论,对于任何迭代程序,必须存在等效的递归程序,反之亦然。这是一个理论结果,因为它没有给出任何关于如何从任意迭代程序派生一个递归程序的提示,反之亦然。

答案 1 :(得分:3)

是。有一种称为tail recursion的递归,它可以直接转换为迭代。一个可以毫无问题地转换为另一个。因此,所有迭代解决方案都可以转换为递归解决方案。

事实上,许多编译器可以检测到您正在进行尾递归,然后将其转换为for循环类型代码以提高效率。

答案 2 :(得分:0)

当不需要循环时,应该使用递归,但该方法必须在某种情况下重复。例如,压缩文件夹。如果有一个子文件夹,它应该调用自己(递归)。如果你愿意,递归可以替代迭代,但不推荐。大多数人只是使用迭代,只在需要时才使用递归。