递归

149 阅读1分钟

递归与循环的区别就是递归有尽头(终止条件),而循环无尽头。

调用自身是递归算法中最难理解的部分,实际上可以理解为:问题分解为了规模更小的相同问题。

下面是使用递归实现深拷贝的代码:

function deepClone(obj) {
    let objClone = Array.isArray(obj) ? [] : {};
    if(obj && typeof obj === "object") {
        for(key in obj) {
            if(obj.hasOwnProperty(key)) {
                 // 判断 obj 是否是对象,如果是,递归复制
                 if(obj[key] && typeof obj[key] === "object") {
                      objClone[key] = deepClone(obj[key]);
                 }else{
                      // 如果不是
                      objClone[key] = obj[key];
                 }
            }
        }
    }      
    return objClone
}         

let a = [1,2,3,4],
     b = deepClone(a);
a[0] = 5;
console.log(a,b)    // a:[5,2,3,4]   b:[1,2,3,4]