函数的递归调用
1、什么是函数的递归调用?
其实说白了就是在函数的内部再调用函数自己本身
function fun(){fun()
}
2、用递归解决问题的条件
(1)一个问题是可以分解成子问题,子问题的解决办法与最原始的问题解决方法相同
(2)在问题分解过程中必须要有明确的结束条件
3、递归过程
(1)递去:从上到下分解问题
(2)归来:从结束条件的位置开始进行回溯,最终得到问题的解
示例:利用递归计算一个数的阶乘
function fun(num){if(n == 1){return 1;}else{return n * fun(num - 1);]
}
4、递归的应用场景
(1)深拷贝
function fun(oldObj){//定义变量用于拷贝oldObj let newObj = Array.isArray(oldObj)?[]:{}//遍历oldObj的属性for(let item in oldObj){//oldObj[item]是属性item的值let temp = oldObj[item];//若item的属性值存在并且是一个对象,则递归访问该对象if(temp && typeof(temp) === 'object'){newObj[item] = fun(temp);}else{//若item的属性值不是一个对象,则直接拷贝newObj[item] = temp;}}//将得到新的对象返回return newObj;
}let person = {name:'小王',age:22,cat:{name:'多多',age:3},friend:['小张','小李']
}fun(person);
(2)遍历树形菜单:将数组转换成多级菜单
(3)递归实现表格的多级表头