JavaScript之递归及其相关案例
- 什么是递归?
递归:一个函数在内部可以调用其本身
var num = 1;
function fn() {
console.log('我爱写代码');
if (num == 6) {
return;
} else {
num++;
}
fn();
}
fn(); //'我爱写代码'*6
由于递归很容易发生栈溢出错误,所以必须要加退出条件return
- 案例:利用递归遍历数据
var data = [{
id: 1,
name: '家电',
goods: [{
id: 11,
gname: '冰箱'
}, {
id: 12,
gname: '洗衣机'
}]
}, {
id: 2,
name: '服饰'
}];
//输入id号,返回相应的数据对象
//1.利用forEach去遍历里面的每一个对象
function getId(json, id) {
var o = {};
json.forEach(function(item) {
o = item;
if (item.id == id) {
//2.得到里层里id对应的数据(递归)
} else if (item.goods && item.goods.length > 0) {
getId(item.goods, id);
}
});
return o;
}
console.log(getId(data, 12));
- 案例:利用递归求解数学题
//1.求阶乘
function fn(n) {
if (n == 1) {
return 1;
} else {
return n * fn(n - 1);
}
}
var num1 = fn(4);
console.log(num1);
//2.求斐波那契数列
function fn1(n) {
if (n == 1 || n == 2) {
return 1;
}
return fn1(n - 1) + fn1(n - 2);
}
var money1 = fn1(5);
console.log(money1);