什么是尾递归?

发布于 2022-08-29 23:55:35 字数 24 浏览 17 评论 0

什么是尾递归?和递归的关系是?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

死开点丶别碍眼 2022-09-05 23:55:35

尾递归是递归的一种特殊形式,即在函数的末尾,返回调用该函数的结果,例如下列计算阶乘的函数(Scheme):

(define (factorial n)
  (define (iter product counter)
    (if (> counter n)
        product
        (iter (* counter product)
              (+ counter 1))))
  (iter 1 1))

iter 的末尾,要么返回一个数值(product)要么返回一个对 iter 自己的调用,这就叫尾递归。

尾递归的意义在于,所有的尾递归都可以被编译器简单地优化成普通循环,而不必像通常的递归一样,每次调用都消耗额外的栈空间。这是因为,在递归调用发生时,函数已经运行到了末尾,编译器无需再在栈中维护这个函数的环境,只需简单地用下一个函数调用的环境覆盖当前环境即可。

参考:

最后非常推荐读一下 计算机程序的构造和解释 这本书会讲到包括尾递归在内的,大量改善计算机程序复杂性的基本技巧,上面的例子也摘自本书。

不如归去 2022-09-05 23:55:35

大概是循环式的递归。每次递归更新某些变量,而不是产生更多同级别的调用自身。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文