• 尾调用与尾递归


    一、尾调用

    尾调用是指函数的返回值为纯函数调用的情况,即函数最终的返回值与它返回的调用函数的返回值完全一致,这也要求函数最后一句话是返回调用某个函数值,且该函数调用不出现在表达式中。

    现代编译器一般都支持尾调用优化,编译器执行到最后一条语句再调用函数时不用保存当前函数的栈信息,加快程序的执行效率。

    二、尾递归

    尾调用函数最后调用的是它自身,特殊的尾调用。对编译器优化很敏感,列子如下:

    //普通线性递归写法
    function
    fib(n){ if(n<=2){ return 1; } return fib(n-1)+fib(n-2); } console.log(fib(3)) console.log(fib(50))
    //尾递归的写法,此时当递归层级深时执行速度比上面的快很多
    function fibtail(n,acc1,acc2){ if(n<2){ return acc1; } //console.log(); return fibtail(n-1,acc2,acc1+acc2); } console.log(fibtail(3,1,1)) console.log(fibtail(50,1,1))
  • 相关阅读:
    python-常用数据类型
    python入门篇
    Vue 架构
    Bootstrap Web框架
    策略模式
    Java线程安全总结
    JVM中线程状态转换图
    java 多线程并发系列之 生产者消费者模式的两种实现
    JVM 垃圾回收器详解
    MyISAM和InnoDB索引实现对比
  • 原文地址:https://www.cnblogs.com/doit8791/p/8207334.html
Copyright © 2020-2023  润新知