刚才看到了一道拼多多的面试题 :
使用递归的方法,将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 。
只要找对了规律和出口递归就很简单了
递归典型的代表就是阶乘 和 斐波那契数列 。有兴趣的可以用这两个练习一下递归,可以说上面说的两个规律 ,在这上面表现的一目了然。
但是还是要说一下 递归的优点虽然是让代码变得更加简洁 ,但是除此之外递归并没有什么用途 , 他只能用在少量的计算上。
递归是一种计算速度极慢的算法 ,原因是 :先执行最后才执行完 ——递归需要一直等待最后一次的计算结束返回值后 ,才会一层层的向上级返回,然后再一层层的计算,所以说递归注定了是一种计算速度慢的算法。
因此我们在使用递归的时候一定要注意 。