SOURCE

// 递归基础 - 计算总和
// function add(n) {
//     if(n == 1) return n
//     return add(n - 1) + n
// }
// console.log(add(10))

// JS 递归 假如楼梯有 n 个台阶
// 每次可以走 1 个或 2 个台阶
// 请问走完这 n 个台阶有几种走法
// function climbStairs(n) {
//     if(n == 1 || n == 2) return n
//     return climbStairs(n - 1) + climbStairs(n - 2)
// }
// console.log(climbStairs(4))

// 求1,3,5,7,…第n项和前n项的和

// 先求出第n项
// function foo(n) {
//     if(n == 0) return 1
//     console.log(n)
//     return foo(n - 1) + 2
// }
// // 求和
// function aa(n) {
//     if(n == 0) return 1
//     return aa(n - 1) + foo(n)
// }
// console.log(aa(3))
// 16
//  9
//  if(不成立 ) return foo(4-1) + 2    ---- 5
//  if(  不成立 ) return foo(3 - 1) + 2 ------- 4
//  if( 不成立 ) return foo(2-1) + 2 -------- 3
//  if( 不成立 ) return foo(1-1) + 2 ------- 2
//  if( 成立 ) return 1


// 求2,4,6,8,…第n项和前n项的和
// function num(n) {
//     if(n == 0) return 2
//     return num(n - 1) + 2
// }

// function add(n) {
//     if(n == 0) return 2
//     return add(n - 1) + num(n)
// }
// console.log(add(2))

// 递归实现深浅拷贝
const num = {
    a:'01',
    b: {
        c:'02'
    }
}
// const newObj = {...obj}    浅复制
// 深复制
// const newObj = JSON.parse(JSON.stringify(obj))
// newObj.a = '001'
// newObj.b.c = '002'
// obj.b.c = '0002'
// console.log(obj)
// console.log(newObj)

// 递归实现深浅复制
function copy(obj) {
    const map = {}
    for(key in obj) {
        if(typeof obj[key] === 'object') {
            map[key] = copy(obj[key])
        } else {
            map[key] = obj[key]
        }
    }
    return map
}
const newObj = copy(num)
newObj.a = '0001'
newObj.b.c = '0002'
num.a = 1
console.log(newObj)
console.log(num)
console 命令行工具 X clear

                    
>
console