函数的递归调用

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);

函数的递归调用_第1张图片 

(2)遍历树形菜单:将数组转换成多级菜单

(3)递归实现表格的多级表头

你可能感兴趣的:(JavaScript,javascript,前端)