// 递归基础 - 计算总和
// 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