关于 JS 递归算法 记录

刚才看到了一道拼多多的面试题  :

 使用递归的方法,将obj变为obj2的格式(拼多多2018前端笔试真题)

obj = [
    {id:1,parent:null},
    {id:2,parent:1},
    {id:3,parent:2}
]

obj2 = {
    obj:{
        id: 1,
        parent: null,
        child: {
            id: 2,
            parent: 1,
            child: {
                id: ,3,
                parent: 2
            }
        }
    }
}

我的写法是:

    function mul(arr, n) {
        if (n == (arr.length - 1)) {
            return arr[n]
        }
        arr[n].child = mul(arr, n + 1);
        return arr[n];
      
    }
    var obj2.bbj = mul(obj, 0);

这有有一些对递归的理解 : 

   递归就是两点  :

       1 、 找规律 

       2 、 找出口 

   以上为例 规律就是child =  arr[n + 1] , 出口就是 n = arr.length - 1时 return 。

 

只要找对了规律和出口递归就很简单了 

递归典型的代表就是阶乘 和 斐波那契数列 。有兴趣的可以用这两个练习一下递归,可以说上面说的两个规律 ,在这上面表现的一目了然。

但是还是要说一下 递归的优点虽然是让代码变得更加简洁  ,但是除此之外递归并没有什么用途 , 他只能用在少量的计算上。

递归是一种计算速度极慢的算法 ,原因是 :先执行最后才执行完 ——递归需要一直等待最后一次的计算结束返回值后 ,才会一层层的向上级返回,然后再一层层的计算,所以说递归注定了是一种计算速度慢的算法。

因此我们在使用递归的时候一定要注意 。

猜你喜欢

转载自blog.csdn.net/chao2458/article/details/81388497
今日推荐