【问题标题】:What is tail recursion optimization? [duplicate]什么是尾递归优化? [复制]
【发布时间】:2011-01-25 11:12:09
【问题描述】:

可能重复:
What is tail-recursion?

什么是尾递归优化?

【问题讨论】:

标签: optimization recursion


【解决方案1】:

a 调用 b 调用 c 调用 d。

最后你有尾巴:

d 返回 c 返回 b 返回 a。如果所有这些都不做(例如在递归中,实际上是a调用a调用a调用a),那么您可以优化它... ...进入 d 返回到 a。

【讨论】:

    【解决方案2】:

    尾递归并不意味着将递归调用变成循环。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-15
        • 2011-09-04
        • 2019-06-02
        • 2020-06-13
        • 2011-04-10
        • 1970-01-01
        • 2014-06-23
        • 1970-01-01
        相关资源
        最近更新 更多