2018-12-25|2018-12-25 ES尾递归
例子:阶乘函数,对比写法:尾递归、一般递归、for循环
注释部分是:运行对比的效率时间
let factorilTCO=function(n,current=1){
(n === 1) ?current :factorilTCO(n-1,current*n)
}
【2018-12-25|2018-12-25 ES尾递归】 let factorilFOR=(n)=>{
let result=0
for(let i =0;
i
}
return result
}
let factorilNormal=(n)=>{
n ===1 ? 1 : n*factorilNormal(n-1)
}
let startNormal=performance.now();
factorilNormal(5000)//100 0.5000000819563866 ;
10000 : 2.6000000070780516 ;
50001.5999998431652784
console.log(performance.now()-startNormal)
let startTCO=performance.now();
factorilTCO(10000) //100 1.0000001639127731;
5000 :1.2000000569969416
console.log(performance.now()-startTCO)
let startFOR=performance.now();
factorilFOR(10000)//1000.699999975040555;
100000000240.2000001166016;
100001.2000000569969416
console.log(performance.now()-startFOR)
结果:
1、实际对比执行时间,发现尾递归的执行时间并没有少,还可能多了。
2、对于爆栈,尾递归执行10000!就爆了,一般递归可以执行10000!,for循环不会爆栈
3、百度尾递归,都说目前浏览器还没有做优化,解释器或者编译器并没有什么实际的优化,只是写法的不同而已;有的也说严格模式能够跑,不会爆栈,不过测试了还是会爆栈
推荐阅读
- 六月更新的......
- 三生三世之凤尾花开第34章上神过招·连载
- 无尾鱼与独脚鸟
- 胡乱解字
- 风吹一季——写在大学的尾巴上
- 2019-04-30,4月的结尾
- 1月尾,是2018年的十二分之一,陈先生自我独白
- 学生作品|tina - 鸢尾花预测
- 热点文章|鸢尾花预测(如何创建机器学习Web应用程序())
- 故事的结尾,该怎么收尾