Recursion 每个递归函数都可以重写为迭代函数吗?

Recursion 每个递归函数都可以重写为迭代函数吗?,recursion,iteration,computer-science,Recursion,Iteration,Computer Science,这个问题我已经想了很长时间了,但我想不出答案。问题是,如果每个递归函数都有一个迭代函数来做同样的事情 比如说, factorial(n) { if (n==1) { return 1 } else { return factorial(n-1) } } 这可以很容易地迭代重写: factorial(n) { result = 1; for (i=1; i<=n; i++) { result *= i } retur

这个问题我已经想了很长时间了,但我想不出答案。问题是,如果每个递归函数都有一个迭代函数来做同样的事情

比如说,

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
}
阶乘(n){
结果=1;

对于(i=1;i是的,从理论角度来看,递归函数总是可以写成迭代——这一点已经讨论过了。引用链接文章:

因为可以使用严格的迭代结构构建图灵完备语言,而只使用递归结构构建转向完备语言,因此这两种语言是等价的

解释一点:我们知道任何可计算的问题都可以用图灵机器来解决。不需要递归就可以构造一种编程语言
a
,这相当于图灵机器。同样,不需要迭代就可以构造一种编程语言
B
,计算能力相当于Turi自动售货机


因此,如果
A
B
都是,我们可以得出结论,对于任何迭代程序,都必须存在一个等价的递归程序,反之亦然。这是一个理论结果,从这个意义上讲,它并没有给你任何提示,说明如何从任意迭代程序派生出一个递归程序,或者从任意迭代程序派生出一个递归程序。

不必从理论上讲,只要观察到处理器(如奔腾)只是迭代运行,就很容易让自己相信任何递归函数都可以有一个迭代等价物。