一、什么是递归函数
<script>
//递归函数:函数内部自己调用自己 这个函数就是递归函数
var num = 1
function fn() {
console.log('调用');
if (num == 3) {
return; //递归里面必须加退出条件
}
num++
fn()
}
fn()
</script>
二、递归
<script>
//递归函数求阶乘
function fn(num) {
if (num == 1) {
return 1;
}
return num * fn(num - 1);
}
console.log(fn(3));
</script>
三、斐波那契数列
<script>
//利用递归函数求斐波那契数列(兔子序列) 1、1、2、3/5/8/13/21
//用户输入一个数字n就可以求出这个对应的兔子序列值
function fn(n) {
if (n == 1 || n == 2) {
return 1
}
return fn(n - 1) + fn(n - 2)
}
console.log(fn(6));
</script>
四、利用递归遍历数据
<script>
var student = [{
id: 1,
name: '张三',
school: [{
id: 12,
name: '清华'
}, {
name: '北大'
}]
}, {
id: 2,
name: '李四'
}]
//输入id号 返回数据对象
//1.利用forEach去遍历里面的每一个对象
function getId(data, id) {
data.forEach(function(item) {
if (item.id == id) {
console.log(item);
} else if (item.school && item.school.length > 0) { //取得里面的数组 并且数组不为0
getId(item.school, id)
}
})
}
getId(student, 12)
</script>
五、浅拷贝
<script>
var obj = {
id: 1,
name: 'andy',
msg: {
age: 18
}
}
var o = {}
// for (var i in obj) {
// o[i] = obj[i]
// }
// console.log(o);
// obj.msg.age = 19
// console.log(o);
console.log('-----------');
//浅拷贝只是拷贝一层 更深层次对象级别的只拷贝引用
Object.assign(o, obj)
console.log(o);
</script>
六、深拷贝
<script>
//深拷贝拷贝多层 每一级别的数据都会拷贝
var obj = {
id: 1,
name: '张三',
msg: {
age: 18
},
color: ['pink', 'blue']
}
var o = {}
//封装函数
function deepCopy(newObj, oldObj) {
for (var k in oldObj) {
//判断我们的属性值属于哪种类型数据
//1.获取属性值
var item = oldObj[k]
//2.判断这个值是否为数组
if (item instanceof Array) {
newObj[k] = []
deepCopy(newObj[k], item)
} else if (item instanceof Object) { //判断是否为对象
newObj[k] = {}
deepCopy(newObj[k], item)
} else { //属于简单类型
newObj[k] = item
}
}
}
deepCopy(o, obj)
console.log(o);
obj.msg.age = 20
console.log(o);
</script>