JS递归函数案例

如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。递归函数的作用和循环效果一样。由于递归很容易发生“栈溢出(stack overflow)”错误,所以必须要加退出条件return。我们可以利用递归来求数学题和遍历数据

var num = 1;
function fn() {
   console.log("我爱学习");
   if(num == 6) {
      return;//递归里面必须加退出条件
   }
   num++;
   fn();//在函数内部调用了自身
}
fn();

1、利用递归求数学题

案例1:利用递归函数求1 * 2 * 3 * 4 *…n
function fn(n) {
   if(n == 1) {
      return 1;
   }
   return n * fn(n - 1);
}
console.log(fn(3));//输出6
案例2:求斐波那契数列Fibonacci中的第n个数是多少? 1 1 2 3 5 8 13 21…(前两个数相加得到第三个数)
function getF(n) {
    if(n == 1 || n == 2){
        return 1;    
    }
    return getF(n-1) + getF(n-2);//n-1为n的前一项,n-2为n的前两项
}
console.log(getF(6));//输出8

2、利用递归遍历数据

案例:输入id号就可以返回数据对象
var data = [{
   id:1,
   name:"美食",
   goods:[{
      id:11,
      gname:"螺蛳粉"
   },
   {
      id:12,
      gname:"臭豆腐"
   }]
},
{
   id:2,
   name:"水果"
}];

//利用forEach去遍历里面的每一个对象
function getID(data,id) {
   var o = {};
   data.forEach(function(item) { //item为数组元素
      if(item.id == id) { 
         //console.log(item);
         o = item;//这里的o是得到外层数据
         return item;

         //想要得到里层的数组的数据11和12可以利用递归函数
         //符合条件为里面有goods这个数组并且这个数组的长度不为0
      } else if(item.goods && item.goods.length > 0) {
           o = getID(item.goods,id);//函数调用必须有返回值,调用的时候通过上面的return返回item并赋给o,这里的o是得到里层数据
      }
   })
   return o;
}
console.log(getID(data,1));
console.log(getID(data,11));

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值