利用递归实现深拷贝
利用递归将数组转成树结构
流程如下:
1.首先传入两个参数,一个是数组,一个是要查询的pid
2.进入函数,首先遍历数组,进行判断,看看这个要查询的pid
和数组中的parentId一样不,如果一样,说明他有上级
3.使用递归,将这个要查询的pid的id当做刚开始的要查询的pid
查询,再进入递归,查询他们有没有下属,有的话加入到
直到没有下属为止
利用递归将数组转成树结构
总体思路分为两步:
第一步,写出口条件:这里的重点是利用数组的长度作为递归出口。长度为1 的时候递归出去
第二步,写递归条件:首先,递归是自己调用自己,必须得出去,不然死循环。那么,怎么让数组的长度变短呢?需要给一个条件,比如刚开始数组长度是5,那么他应该是第二次比第一次短,是4,然后3、2、1。最后等于1的时候递归就可以出去了。可以使用slice()方法,他的作用是返回一个新数组,里面两个参数,第一个是必须得从哪里开始,第二个是可选哪里结束,这里只需要利用第一个,从1开始,这样每次返回的新数组都会少一个,直至剩下一个,递归结束。
利用递归解决汉罗塔问题
如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数
思路:
将A柱子上的n-1个盘子暂时移到B柱子上
A柱子只剩下最大的盘子,把它移到目标柱子C上
最后再将B柱子上的n-1个盘子移到目标柱子C上
人话:
把A上n-1个盘子通过借助辅助塔(C塔)移到了B上
把最大的一个盘子由A移到C上去
把B上n-1个盘子通过借助辅助塔(A塔)移到了C上