【问题标题】:Can every recursive function be rewritten as an iterative function?每个递归函数都可以重写为迭代函数吗?
【发布时间】:2013-09-10 20:14:31
【问题描述】:
这个问题我已经想了很久,但我想不出答案。问题是,是否每个递归函数都具有相同的迭代函数?
例如,
factorial(n) {
if (n==1) { return 1 }
else { return factorial(n-1) }
}
这可以很容易地迭代重写:
factorial(n) {
result = 1;
for (i=1; i<=n; i++) {
result *= i
}
return result
}
但是还有很多其他更复杂的递归函数,所以我一般不知道答案。这也可能是一个理论计算机科学问题。
【问题讨论】:
标签:
recursion
iteration
computer-science
【解决方案1】:
是的,从理论上讲,递归函数总是可以写成迭代 - 这已经在before 进行了讨论。引用链接的帖子:
因为您可以使用严格的迭代结构构建图灵完备语言和仅使用递归结构构建图灵完备语言,因此两者是等价的。
解释一下:我们知道任何可计算的问题都可以通过图灵机来解决。并且可以在没有递归的情况下构造编程语言A,相当于图灵机。类似地,无需迭代即可构建编程语言B,其计算能力与图灵机相当。
因此,如果A 和B 都是Turing-complete,我们可以得出结论,对于任何迭代程序都必须存在等效的递归程序,反之亦然。这是一个理论上的结果,因为它没有给你任何关于如何从任意迭代程序派生一个递归程序的提示,反之亦然。
【解决方案2】:
不去理论,通过观察处理器(例如奔腾)只是迭代运行,很容易说服自己任何递归函数都可以具有迭代等价物。