递归优化

国外的技术氛围确实很好:https://www.bilibili.com/video/BV1pg4y167Fw?from=search&seid=9662634805636921187    音乐剧将尾递归优化讲的非常棒!!!awesome!

普通递归时,内存需要记录调用的堆栈所出的深度和位置信息。在最底层计算返回值,再根据记录的信息,跳回上一层计算,再跳回更高一层,依次运行,直到最外层的调用函数。在cpu计算和内存会消耗很多,而且当深度过大时,会出现堆栈溢出。

eg:

function sum(n){
  if(n===1)return 1;
  return n+sum(n-1);
}

然而,尾递归优化却将结果进行了缓存,整个计算过程是线性的,调用依次sum(x,total)后,会进入下一个栈,相关的数据信息和 跟随进入,不再放在堆栈上保存。当计算玩最后的值之后,直接返回到最上层的sum(5,0),这能有效的防止堆栈溢出。在 es6之后,我们将迎来尾递归优化,通过尾递归优化,js在解释成机器码的时候,将会向while看齐,也就是说,同时拥有数学表达能力和while的效能。

eg:

function sum(x, total) {

    if(x===1){
        return x+total;
    }
    return sum(x-1, x+total);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三木森森の

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值