js高级-递归函数

1-递归函数,即函数在自己里面调用自己。代表表示如下。

function fn(){
    fn();
}
fn();

1.1_分析下面代码

var num=1;

function fn(){
    console.log('我要打印6句话'+num)
    if(num===6){return;};
    num++
    fn();
};
fn();

执行fn,先打印第一句话,判断否,继续执行,num=2,继续调用函数即打印第二句话,当循环到打印第六句话时,判断条件ture,然后跳出递归,外层的fn()执行完毕。

递归,需要return来跳出,否则将无线循环下去!

1.2_递归练习_求阶层

var num=1;
function fn(n){
    num*=n;
    n=n-1;
    if(n===0){
    return;}
    
    fn(n);
}

fn(2);

或者

function fn(n){
    if(n==1){return 1;}
    return n*fn(n-1);
}

1.3_递归练习_兔子序列

function fn(n){
if(n===1||n===2){return 1;}
    return fn(n-1)+fn(n-2);
}
fn(3);

求第三项由前面两项决定,然后递归,最终为1+1。

1.4_递归_遍历数据

1.4.1_forEach(function(e){})

var a=[
    {id:1,goods:[{id:1},{id:2}]},
    {id:2,goods:[{id:1},{id:2}]},
]

a.foreach(function(e){ console.log(e);});

输出结果为:

{id:1,goods:array(2)}

{id:2,goods:array(2)}

显然,forEach是依次遍历数组的方法,引擎会先看数组的第一个内容执行函数操作,然后再看第二个内容执行函数操作,依次类推。

var a=[
    {id:1,goods:[{id:11},{id:12}]},
    {id:2,goods:[{id:21},{id:22}]},
]

getid(b,id){
    b.forEach(function(e){
    if(e.id===id){console.log(e);}
    else if(e.goods&&e.goods.length>0){
        getid(e.goods,id);
}
})
}

调试:
输出ID为1的对象 console.log(getid(a,1));

但是,写实际项目的时候,不需要打印对象,需要拿到对象。

function getid(arr,id){
var o={};    
    arr.forEach(function(e){
    if(e.id==id){
    o=e;
}else if(e.goods&&e.goods.length>0){
    o=getid(e.goods,id);
}
}
    return o;
);}


前一个o和后一个o属于开辟的不同空间,注意逻辑性。通过上面的代码,可以通过id拿到所需要的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值