如果一個函數(shù)在內(nèi)部可以調(diào)用本身虐秋,榕茧,那個這個函數(shù)就是遞歸函數(shù)。
遞歸函數(shù)的作用和循環(huán)的效果一樣
遞歸很容易發(fā)生“棧溢出"Stack overflow 錯誤客给,所以必須要添加退出條件return
var num = 1;
function fn(){
console.log('打印hello');
if(num == 6){
return;
}
num++;
fn();
}
fn();
- 利用遞歸函數(shù)求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
- 利用遞歸求斐波那契額數(shù)列1用押、1、2起愈、3只恨、5、8抬虽、13官觅、21.........
用戶輸入一個數(shù)字n就可以求出這個數(shù)字對應的序列值
function fn(n){
if(n == 1 || n == 2){
return 1;
}
return fn(n -1) + (n-2);
}
- 利用遞歸:根據(jù)id返回對應的數(shù)據(jù)對象
var data = [{
id : 1,
name : '家具',
goods:[{
id : 10,
gname : '沙發(fā)'
},{
id : 11,
gname : '餐桌'
}]
},{
id : 2,
name : '廚衛(wèi)'
}];
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);