在js中函数自己调用自己,就称为递归。
递归函数的必要条件
递归方程以及递归结束条件,即给递归函数安排出口,否则会造成无限递归,无限递归会造成执行栈溢出,浏览器会报错。
示例代码:
function fun(n) {
if (n === 1) {
return 1
} else {
return n + fun(n - 1)
}
}
let result = fun(3)
console.log(result) //6
// fun(1) //1
// fun(2) //2+1=3
// fun(3) //3+2+1=6
利用递归实现多级遍历,以及深克隆。
//创建一个对象obj,其中的friend属性也是一个对象,friend里的student也是一个对象
var obj = {
name: 'ls',
age: 4,
sex: 'nan',
friend: {
name: 'djw',
age: 24,
sex: 'nan',
student: {
name: 'xlq',
age: 23,
sex: 'nan'
}
}
}
function clone(obj) {
if (typeof obj != 'object') { //判断目标对象数据类型,不是对象则直接返回
return obj;
}
var newObj = {} //创建一个空对象,用以存放遍历后克隆的属性
for (k in obj) {
newObj[k] = clone(obj[k]); //用递归实现深克隆
}
return newObj;
}