zoukankan      html  css  js  c++  java
  • JS递归

    一递归:递归函数就是函数对自身的调用,是循环运算的一种算法模式。

    递归必须由以下两部分组成。

    • 递归调用的过程。
    • 递归终止的条件:在没有限制的情况下,递归运算会无终止地自身调用。因此,在递归运算中要结合 if 语句进行控制,只有在某个条件成立时才允许执行递归,否则不允许调用自身。

    二 递归主要解决的问题:主要解决一些数学运算,如阶乘函数、幂函数和斐波那契数列。

    1 // 菲波那切数列 :1,1,2,3,5,8,13,21,34,55…
    2   function Fib(n) {
    3     if (n == 1 || n == 2) {  //递归出口
    4       return 1;
    5     }
    6     return Fib(n - 1) + Fib(n - 2); //递归体
    7   }
    8   // Fib(4) 3

    用一棵树来理解这个函数的执行过程:

    递归算法的执行过程是不断地自调用,直到到达递归出口才结束自调用过程;到达递归出口后,递归算法开始按最后调用的过程最先返回的次序返回;返回到最外层的调用语句时递归算法执行过程结束。

    递归时间复杂度为O(n^2) ,用递归解决问题时,时间效率低,空间开销大,不适合很大规模的问题的求解。

    三 JS递归与迭代的区别:递归与迭代都是循环的一种,简单比较如下:

    • 在程序结构上,递归是重复调用函数自身实现循环,迭代是通过循环结构实现。
    • 在结束方式上,递归当满足终止条件时会逐层返回再结束,迭代直接使用计数器结束循环。
    • 在执行效率上,迭代的效率明显高于递归。因为递归需要占用大量系统资源,如果递归深度很大,系统资源可能会不够用。
    • 在编程实现上,递归可以很方便的把数学公式转换为程序,易理解,易编程。迭代虽然效率高,不需要系统开销,但不容易理解,编写复杂问题时比较麻烦。

  • 相关阅读:
    一文解读RESTful (转)
    一文解读Redis (转)
    一文解读JSON (转)
    一文解读单点登录 (转)
    一文解读雪碧图 (转)
    一文解读骨架屏 (转)
    一文解读MPA/SPA(转)
    一文解读HTTP2 (转)
    一文解读HTTP (转)
    HTML5中Video标签无法播放mp4的解决办法
  • 原文地址:https://www.cnblogs.com/terrymin/p/14676966.html
Copyright © 2011-2022 走看看