问题描述
假设我们有两个版本的递归函数,其中一个是尾递归的。如果所使用的语言没有尾调用优化,使用尾递归函数是否有任何好处?根据我的理解,如果没有优化,函数的每个版本(尾部和非尾部)将使用相同数量的堆栈帧(在大多数情况下)。
我知道在某些情况下,例如斐波那契函数,即使没有尾调用优化,使用尾调用也可以更有效,因为它避免了双重调用。但是如果函数的两个版本都没有进行两次调用呢?尾递归函数会更高效吗?
解决方法
该问题的答案取决于硬件和语言实现。但是,在大多数情况下,我不得不认为简单的 GOTO
比 CALL
-RETURN
指令对快。