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 result*=n
}
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、百度尾递归,都说目前浏览器还没有做优化,解释器或者编译器并没有什么实际的优化,只是写法的不同而已;有的也说严格模式能够跑,不会爆栈,不过测试了还是会爆栈

    推荐阅读