一般递归到尾递归

时间:2014-07-16 16:18:55

标签: recursion tail-recursion lambda-calculus

理论上可以将每种类型的一般递归转换为尾递归吗?例如,从lambda演算的角度来看它们是等价的吗?这是我与熟人之间的争论。

我的观点是,每次都不可能。例如,如果你有一个递归调用自己两次或三次的函数,那么你就无法将所有递归调用转换为尾调用,对吧?或者总是有办法减少一次递归调用的递归调用次数吗?

1 个答案:

答案 0 :(得分:0)

没有。如果你不能重写你的算法只有尾调用,比如在树遍历中,至少有一个调用不在尾部位置。

有些人可能会认为循环+显式堆栈是迭代的,但是IMO它仍然是递归的,并且树遍历将使堆栈增长,就像一般递归一样。