JavaScript 之递归

递归:如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。简单理解:函数内部自己调用自己,这个函数就是递归函数。

递归函数的作用和循环效果一样,可以重复循环。但是由于递归很容易发生“栈溢出”错误,所以必须要加退出条件return

 function  fn() {
          fn();
      }
     fn();

以下展示的就是栈溢出的错误,所以我们必须要加上退出条件。
在这里插入图片描述
写一个打印五次我最棒的例子

       var num = 1;
      function  fn() {
          console.log('我最棒');
          if(num == 5){
              return;  //必须有退出条件   
          }
          num++;
          fn();
      }
     fn();

结果如图所示:
在这里插入图片描述
递归函数求1~n的阶乘 1 * 2 * 3 * 4…n 的例子

function fn(n){
    if(n == 1){
        return 1;
    }
    return n * fn(n - 1);
}
console.log(fn(3));   //6
console.log(fn(4));    //24

分析一下上述过程
因为用户输入的是3,那么fn(3)第一次调用 return 3 * fn(2),又因为不能直接输出函数结果,所以fn(2) 继续进行调用 return 3 * (2 * fn(1)).第三次继续调用 fn(1) ,最后得到最后的执行结果 3 * 2 ,结果为6.

再看第二个例子:利用递归函数求费波契数列(兔子序列)1、1、2、3、5、8、13…

思路:
只需要直到用户输入的n 的前面两项(n-1 , n-2)就可以计算出 n 对应的序列值。

       function  fb(n){
        if(n ===1 || n === 2){
            return 1;
        }
        return fb(n - 1) + fb(n - 2);
    }
    console.log(fb(3));   //2
    console.log(fb(6));    //8

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值