JS的函数递归

递归



:递归为函数自己调用自己,使用会同时开辟大量内存,结束后同时释放,一般禁止使用


递归理解为 另一种循环,在函数中调用本身这个函数 那么这种写法就叫做递归

使用递归的时候 一定要有退出递归条件,否则就会造成死递归(栈溢出


输出位置不同会影响输出结果 eg:

             function fun(n) {
                 console.log(n);
                 // 结束递归的条件
                 // 当n >= 5满足条件的时候 那么就会执行return
                 // 函数中 return 那么就表示return后面的代码不在执行
                 if (n >= 5) {
                     return;
                 }
                 fun(++n);
            }
            fun(1);
            /* 
                以下代码执行顺序:
                    fun(1)  根据函数名字 进入到函数内部 执行函数内部的代码
                        console.log(1);
                        fun(++n)===>fun(2)
                         console.log(2);
                        fun(++n)===>fun(3)
                         console.log(3);
                        fun(++n)===>fun(4)
                         console.log(4);
                        fun(++n)===>fun(5)
                         console.log(5);
                         n >= 5 条件成立 执行return 不会在执行fun(++n) 函数就执行结束
            */
		  function fun(n) {
                // 结束递归的条件
                // 当n >= 5满足条件的时候 那么就会执行return
                // 函数中 return 那么就表示return后面的代码不在执行
                if (n >= 5) {
                    return;
                }
                fun(++n);
                console.log(n);
            }
            fun(1);
   /* 
                fun(1)  根据函数名字 进入到函数内部 执行函数内部的代码
                    n >= 5 不成立  执行 fun(++n)===》fun(2)  
                    console.log(2) 这条件暂时不执行 需要等待fun(2)函数执行完成
                fun(2) 
                    n >= 5 不成立  执行 fun(++n)===》fun(3)
                    console.log(3)    暂时不执行 需要等待fun(3)函数执行完成
                fun(3)
                    n >= 5 不成立 执行fun(++n) ===》fun(4)
                    console.log(4) 暂时不执行 需要等待fun(4) 函数执行完成   
                fun(4)
                    n >= 5 不成立 执行fun(++n) ===》fun(5)
                    console.log(5)   暂时不执行 需要等待fun(5) 函数执行完成 

                fun(5) 
                    n >= 5 成立  执行 return  
                    fun(5)执行完成
                    console.log(5) 执行完这条代码就说明 fun(4)函数执行完成
                    console.log(4) 执行完这个条代码说明 fun(3)函数执行完成
                    console.log(3) 那么 fun(2)函数就会执行完成
                    console.log(2)  那么fun(1) 函数就会执行完成
            */
          
//递归调用递归实现循环嵌套  求1!+2!+3!+....+20! 阶乘求和
   function fn(n){      
        if(n==1){
            return 1
        }       
        return n* fn(--n)
    }
    var sum=1;
    function fn1(i){
        if(i==1){
            return 1
        } 
        sum+=fn(i);
        fn1(--i);
        return sum
    }
   console.log(fn1(20));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raccom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值