• 递归 函数


    递归 

    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));































     

  • 相关阅读:
    46. 全排列
    Windows下Kafka集群搭建
    大数据(9f)Flink双流JOIN
    移动端适配单位vw和px的转换
    支付宝周期扣款(支付后签约)业务功能总结(php+golang)
    4.3 基于注解的声明式事务和基于XML的声明式事务
    Node.js入门指南(一)
    CPU资源控制
    记录一个iOS UITableView 正在刷新的时候修改数据源导致的崩溃
    Java算法-力扣leetcode-125. 验证回文串
  • 原文地址:https://blog.csdn.net/lv_suri/article/details/127998041