10-2.递归函数

10-2.递归函数

函数调用自身就叫递归。

递归平时是用来写算法的。

当我们想将arr = [1,2,3,[4,5]];输出结果为1,2,3,4,5,6,7这样的形式时,我们可以这样:

var arr = [1,2,3,[4,5]];
for (var i = 0, length = arr.length; i<length; i++){
    if (typeof arr[i] !== 'object'){//当第i项不是数组或对象时,直接输出
        console.log(arr[i]);
    }else{//主要就是解决[4,5]
        var result = arr[i];
        for( var a = 0,length = result.length; a<length; a++){
            console.log(result[a]);
        }
    }
}

此时虽然效果达到了,但是如果我们换成arr = [1,2,3,[4,5,[6,7]]]呢,就必须再写一层for循环,为了解决这种问题,我们采用递归,调用函数即可:

function fn(arr) {
    for( var i = 0,length = arr.length; i < length; i++){
        if( typeof arr[i] !== 'object'){
            console.log(arr[i]);
        }else{
            fn( arr[i] );//再次调用fn函数
        }
    }
}
var arr = [1,2,3,[4,5,[6,7]]];
fn( arr );
//原理就是:打印数组的每一项,如果这一项不是一个对象,就直接打印,如果是一个对象,把这个对象传入fn,再去进行拆解

下面再用一个对象来举个例子📃

 var obj = {
            nickname : '公孙离',
            age: 18,
            attack:{
                physical: 1200,
                magic: 800,
                skill:['晚云落','岑中归月','霜叶舞']
            }
        }
        function hero(obj){
            for ( var key in obj){
                console.log('键名:', key, '  键值: ',obj[key]);
                if( typeof obj[key] !== 'object'){
                    var obj_a = {};
                    obj_a[key] = obj[key];
                }else{
                    hero( obj[key] );
                }
            }
        }
        hero( obj );
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值