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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这个不错分享给大家,从扣上看到的,就转过来了 《电脑专业英语》 file [fail] n. 文件;v. 保存文...
    麦子先生R阅读 6,610评论 5 24
  • 1. file n. 文件;v. 保存文件2. command n. 命令指令3. use v. 使用用途4. p...
    喵呜Yuri阅读 773评论 0 4
  • 前面的话 函数是所有编程语言的重要组成部分,在ES6出现前,JS的函数语法一直没有太大的变化,从而遗留了很多问题,...
    CodeMT阅读 837评论 0 1
  • 每天都在体验生活,体验不同的经历,每天打坐冥想时,都在思考、每个人的背后到底经历了什么。有的人积极向上,有...
    gq青云阅读 248评论 0 1
  • 女孩子出门在外,头一个关心“安全”。 古语说:“穷山恶水多刁民。”来之前最担心这个问题,想想晚自习下班,月黑风高,...
    苏杭一叶阅读 258评论 0 4