递归

一、概念:函数中调用函数自己,但是一定要有结束的条件

    <script>
    var i=0;
    function f1(){
        i++;
        if(i<5){
            f1();
        }
        console.log("哈哈");
    }
    f1();//输出5次哈哈
    </script>

二、案例

    <!-- 递归实现:求n个数字的和 -->
    <script>
        function getSum(n){
            if(n==1){
                return 1;
            }
            return n+getSum(n-1);
        }
        console.log(getSum(5));//15
        //执行过程:
        //1.代码执行getSum(5)---->进入函数,此时执行的n=5.执行5+getSum(4),此时代码等待,先不进行计算
        //2.执行getSum(4)----->进入函数,执行n=4,执行4+getSum(3),此时代码等待,先不进行计算
        //3.执行getSum(3)------>进入函数,执行n=3,执行3+getSum(2),此时代码等待,先不进行计算
        //4.执行getSum(2)------>进入函数,执行n=2,执行2+getSum(1),此时代码等待,先不进行计算
        //5.执行getSum(1)------>进入函数,执行n=1,返回结果是1,所以getSum(1)=1;
        //6.往回走:2+getSum(1)------>2+1;
        //7.往回走:3+getSum(2)------>3+2+1;
        //8.往回走:4+getSum(3)------>4+3+2+1;
        //9.往回走:5+getSum(4)------>5+4+3+2+1--->得出结果等于15
        //10.结束输出结果15
    </script>
    <!-- 递归案例:求一个数字各个位数上的和 -->
    <script>
        function getEverySum(n){
            if(n<10){
                return n;
            }
            return n%10+getEverySum(parseInt(n/10));
        }
        console.log(getEverySum(1265));//14
    </script>
    <!-- 递归案例:求斐波那契数列 -->
    <script>
        function getFib(n){
            if(n==1||n==2){
                return 1;
            }
            return getFib(n-1)+getFib(n-2);
        }
        console.log(getFib(10));//55
    </script>

三、应用:(后面文章介绍)

  • 深拷贝
  • 遍历DOM树
原文地址:https://www.cnblogs.com/EricZLin/p/9081219.html