2018-12-25 ES尾递归

例子:阶乘函数,对比写法:尾递归、一般递归、for循环

注释部分是:运行对比的效率时间


let factorilTCO=function(n,current=1){

(n === 1) ?current :factorilTCO(n-1,current*n)

}

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 ; 5000  1.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)  //100  0.699999975040555;100000000  240.2000001166016  ; 10000  1.2000000569969416

console.log(performance.now()-startFOR)


结果:

    1、实际对比执行时间,发现尾递归的执行时间并没有少,还可能多了。

    2、对于爆栈,尾递归执行10000!就爆了,一般递归可以执行10000!,for循环不会爆栈

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

你可能感兴趣的:(2018-12-25 ES尾递归)