• 递归 函数


    递归 

    1,什么是递归函数:如果一个函数在内部可以调用其本身,那么这个函数就是递归函数

     2,简单理解函数内部自己调用自己,这个函数就是递归函数

     3,递归函数的作用和循环效果一样

      死递归写法:

    1. function fn() {
    2.     fn();
    3.   }
    4.   fn();

            一般写法:递归里面必须加退出条件

    1. var num = 1;
    2.   function fun() {
    3.     console.log("打印5句话");
    4.     if (num == 6) {
    5.       return; //递归里面必须加退出条件
    6.     }
    7.     num++;
    8.     fn();
    9.   }
    10.   fn();

      利用递归函数求1-n的阶乘1*2*3*4*5*..n 

    1. function fn(n) {
    2.     if (n == 1) {
    3.       return 1;
    4.     }
    5.     return n * fn(n - 1)
    6.   }
    7.   console.log(fn(3)); // 6
    8.   console.log(fn(4)); // 24
    9.   //详细分析:假如用户输入的是3
    10.   // return 3 * fn(3 - 1)
    11.   // return 3 * fn(2)
    12.   // return 3 * (2 * fn(1))
    13.   // return 3 * (2 * 1)
    14.   // return 3 * (2)
    15.   // return 6

    利用递归函数求斐波那契数列(兔子序列)1,1,2,3,5,8,13,21.....

    用户输入一个数字n就可以求出 这个数字对应的兔子序列值

    我们只要知道用户输入是n,前面两项(n-1  n-2 )就可以计算出n 对应的序列值

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

    利用递归遍历数据 

    data数组中有两个对象1与2,1中又有两个对象11与12

    1. var data = [{
    2.     id: 1,
    3. name: '家电',
    4. goods: [{ id: 11, name: '冰箱' }, { id: 12, name: '洗衣机' }]
    5.   }, {
    6.     id: 2,
    7. name: '服饰'
    8.   }];

       需求:我们想输入id号就可以拿到返回的数据对象

       1,利用forEach 去遍历里面的每一个对象 

    1. function getID(json, id) {
    2.     json.forEach(function (item) {
    3.       // console.log(item);  //2个数组元素
    4.       if (item.id == id) {
    5.         console.log(item);
    6.         //2,我们想要得到里层的数据  11  12  可以用递归函数来做
    7.         //里面要有goods这个数组并且数组的长度不为0
    8.       } else if (item.goods && item.goods.length > 0) {
    9.         getID(item.goods, id);
    10.       }
    11.     })
    12.   }
    13.   console.log(getID(data, 1));
    14.   console.log(getID(data, 2));
    15.   console.log(getID(data, 11));
    16.   console.log(getID(data, 12));

    根据上面的只是打印,现在要求数据返回给我们
     

    1. var data = [{
    2.     id: 1,
    3.     name: '家电',
    4.     goods: [{
    5.        id: 11,
    6.        name: '冰箱',
    7.        goods: [{
    8.               id: 111,
    9.               name: '海尔冰箱'
    10.        }, {
    11.               id: 112,
    12.               name: '美的洗衣机'
    13.         }]
    14.      }, {
    15. id: 12,
    16. name: '洗衣机'
    17.      }]
    18.   }, {
    19.     id: 2,
    20. name: '服饰'
    21.   }];
    22.   //想输入id号就可以拿到返回的数据对象
    23.   //1,利用forEach 去遍历里面的每一个对象
    24.  
    25. function getID(json, id) {
    26.     var o = {};
    27.     json.forEach(function (item) {
    28.       // console.log(item);  //2个数组元素
    29.      if (item.id == id) {
    30.         // console.log(item); 不需要打印直接保存给o就可以了
    31.         o = item
    32.         //2,我们想要得到里层的数据  11  12  可以用递归函数来做
    33.         //里面要有goods这个数组并且数组的长度不为0
    34.      
    35. } else if (item.goods && item.goods.length > 0) {
    36.           o = getID(item.goods, id);
    37.       }
    38.     });
    39.     return o;
    40.   }
    41.   // getID(data, 1)
    42.   // getID(data, 2)
    43.   // getID(data, 11)
    44.   // getID(data, 12)
    45.   console.log(getID(data, 1));
    46.   console.log(getID(data, 2));
    47.   console.log(getID(data, 11));
    48.   console.log(getID(data, 12));
    49.   console.log(getID(data, 111));
    50.   console.log(getID(data, 112));































     

  • 相关阅读:
    Python猜数字小游戏
    又被夺命连环问了!从一道关于定时任务的面试题说起。
    郑州分销系统开发|如何实现快速分销裂变?
    Redis 集群
    vs2022 编译遇见编译器堆空间不足,解决办法(针对CMAKE工程)
    限流器算法实现(JUC原子类使用实践)
    Centos7配置国内yum源
    如何保持注意力,高效学习
    SpringBoot集成Shardingjdbc+seata AT模式
    Linux搭建Apache(秒懂超详细)
  • 原文地址:https://blog.csdn.net/lv_suri/article/details/127998041