什么是尾递归优化?

时间:2010-03-09 14:30:29

标签: optimization recursion

  

可能重复:
  What is tail-recursion?

什么是尾递归优化?

3 个答案:

答案 0 :(得分:5)

来电b调用c来电d。

最后你有尾巴:

d返回c返回b返回a。如果所有这些都没有做任何事情(比如在递归中,它实际上是一个调用,调用一个调用a),那么你可以优化... ...进入d返回a。

答案 1 :(得分:5)

尾递归并不意味着您将递归调用转换为循环。

这意味着在递归调用时不再需要堆栈帧,因此可以将其删除。如果重新调用是方法中的最后一个语句,并且递归调用的返回值是当前方法的返回值,则会发生这种情况。通过消除当前的堆栈帧,递归调用可以在没有堆栈溢出错误的情况下进入任意深度,并且可以节省大量资源。

这种优化通常由编译器/解释器而不是程序员完成。

答案 2 :(得分:0)

JavaScript: The Good Parts中,Crockford说,“有些语言提供尾递归优化。这意味着如果函数返回递归调用自身的结果,那么调用将被循环替换,这可以显着加快速度“起来。