JS中的递归

1.递归的概念

在程序中函数直接或间接调用自己

注意: 使用递归函数一定要注意,处理不当就会进入死循环,递归一定要有结束的条件。递归函数只有在特定的情况下使用 ,比如阶乘问题。

2.递归的例子

(一)递归实现:求1~5之间的和

	//函数声明
   function getSum(x) {
   //结束条件
     if(x==1){
       return 1;
     }
     return x + getSum(x-1);
   }
   //函数的调用
   console.log(getSum(5));

执行过程:

  1. 代码执行getSum(5)—>进入函数,此时的x是5,执行的是5+getSum(4),此时代码等待,5+getSum(4)这句代码先不进行计算,先执行getSum(4);
  2. 代码执行getSum(4)—> 进入函数, 执行的是4+getSum(3),代码等待, 先执行的是getSum(3);
  3. 代码执行getSum(3)—>进入函数,执行的是3+getSum(2),代码等待,先执行的是getSum(2);
  4. 代码执行getSum(2)—>进入函数,执行的是2+getSum(1),代码等待, 先执行的是getSum(1),此时x == 1了,执行的是x ==1的判断,return 1,
  5. 此时getSum(1)的结果是1,开始向外走出去
    2+getSum(1) 此时的结果是:2+1
    也就是getSum(2) = 2+1
    然后执行3+getSum(2) 此时的结果是:3+2+1
    4+getSum(3) 此时的结果是:4+3+2+1
    5+getSum(4) 此时的结果是:5+4+3+2+1 结果为15

(二):求一个数字各个位数上的数字的和

function getEverySum(x) {
	//结束条件
      if (x < 10) {
        return x;
      }
      //获取的是这个数字的个位数
      return x % 10 + getEverySum(parseInt(x / 10));
    }
    console.log(getEverySum(1364));

步骤分析

  1. x = 1364,进入函数,不满足结束的条件,继续执行下一步,x % 10得到的是个位上的数字,1364 % 10取余得到的是个位数字4;得到4 + getEverySum(parseInt(1364 / 10)),此时代码等待,4 + getEverySum(parseInt(1364 / 10))这句代码先不进行计算,先执行getEverySum(parseInt(1364 / 10));parseInt(1364 / 10) = 136,得到x = 136;
  2. 代码执行getEverySum(136),x=136,进入函数,不满足结束的条件,继续执行下一步, x % 10得到的还是个位上的数字,136 % 10取余得到的是个位数字6;得到6 + getEverySum(parseInt(136 / 10)),此时代码等待,6 + getEverySum(parseInt(136 / 10))这句代码先不进行计算,先执行getEverySum(parseInt(136 / 10));parseInt(136 / 10) = 13,得到x = 13;
  3. 以此类推,最后得出4 + 6 + 3 + 1 = 14

(三)求Fibonacci数列(斐波那契数列)

1,1,2,3,5,8,13,21,34,55,89...求第 12 项
    function getFib(x) {
		//结束条件
      if (x == 1 || x == 2) {
        return 1;
      }
      //在这里函数重复调用,直到满足结束条件为止
      return getFib(x - 1) + getFib(x - 2);
    }
    console.log(getFib(12));
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值