如果一个函数在内部可以调用本身,,那个这个函数就是递归函数。
递归函数的作用和循环的效果一样
递归很容易发生“栈溢出"Stack overflow 错误,所以必须要添加退出条件return
var num = 1;
function fn(){
console.log('打印hello');
if(num == 6){
return;
}
num++;
fn();
}
fn();
- 利用递归函数求1-n的阶乘12345…n
function fn(n){
if(n== 1) {
return 1;
}
return n * fn(n-1);
}
fn();
//思路:假如用户输入3
//return 3 * fn(2)
//return 3 * fn(2 * fn(1))
//return 3 * fn(2 * 1)
//return 3 * 2
//return 6
- 利用递归求斐波那契额数列1、1、2、3、5、8、13、21…
用户输入一个数字n就可以求出这个数字对应的序列值
function fn(n){
if(n == 1 || n == 2){
return 1;
}
return fn(n -1) + (n-2);
}
- 利用递归:根据id返回对应的数据对象
var data = [{
id : 1,
name : '家具',
goods:[{
id : 10,
gname : '沙发'
},{
id : 11,
gname : '餐桌'
}]
},{
id : 2,
name : '厨卫'
}];
function getId(data,id){
var obj={};
data.forEach(function(item){
if(item.id == id ){
obj = item;
}else if(item.goods && item.goods.length > 0){
obj = getId(item.goods,id);
}
});
return obj;
}
getId(data,1);
getId(data,2);
getId(data,10);
getId(data,11);