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)递归实现表格的多级表头