什么是递归?

132 阅读1分钟

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

      let num = 0;

        function fu() {
            console.log("任务打印5句");
            //判断条件
            if (num == 5) {
                //条件完成,return退出循环
                return;
            }
            num++;
            fu()
        }
        fu()
        
        注: 必须有退出条件(return),否报((stack overflow))栈溢出错
  

需求:输入id返回相应对象数据

  //定义数据
        let data = [{
            id: 1,
            name: "家电",
            goods: [{
                id: 11,
                gname: "冰箱",
                goods: [{
                    id: 111,
                    gname: "手机"
                }, {
                    id: 112,
                    gname: "电风扇"
                }]
            }, {
                id: 12,
                gname: "洗衣机"
            }]
        }, {
            id: 2,
            name: "服装"
        }];

        function fu(json, id) {
            let obj = {} //用户返回对象数据
            json.forEach(item => {
                //console.log(item); 打印两个对象数据
                //判断输入id与item.id对应,则返回相应对象
                if (item.id == id) {
                    obj = item;
                    return item
                } else if (item.goods && item.goods.length > 0) {
                    //判断item.goods  并且 item.goods.length > 0 的对应对象数据
                    //这里再次调用函数本身,省略遍历
                    obj = fu(item.goods, id);
                }
            });
            return obj;
        }
        console.log(fu(data, 1));     
        console.log(fu(data, 2));
        console.log(fu(data, 11));
        console.log(fu(data, 12));
        console.log(fu(data, 111));

总结:

优点:可以查找/返回多层嵌套数据

缺点: 容易死递归报“栈溢出错误”,必须有退出条件(return退出循环)