js中算法-详解递归

1.含义
递归:指的是函数自己调用自己
2.简单例子-调用过程

calFact(num) {
 if (num == 1){
 	return 1 
 } else{ 
 	return this.calFact(num-1) 
 }
}

// 调用方法
console.log('value', this.calFact(3))// 最终打印结果为1

调用时,该函数进入调用栈:栈的特点-参数从栈底开始叠起来,最顶部的完成后最先弹出(后进先出)。
下图方框处就是调用栈

num=3,num=3放入栈底。走的else条件再次调用自己
num=2,继续放入栈中叠在num=3上,再次符合else条件调用自己
num=1,继续放入栈中在num=2上,成功return 1
函数执行完成,调用栈顶的num=1返回弹出调用栈,往下依次弹出num的值。
注意每次调用栈中的变量是不能当前变量的上一层或下一层的值。
调用栈过程图

3.项目运用
在一个未知级别的复杂数组中,根据给定的key值查找它对应的name进行回显。
分析:因为数组里面会有多层嵌套children数组,单用循环不好分析。用递归+循环可解决。

let testArr = [{key:'1',name:'aa',children:[{key:'a1',name:'0a'},{key:'a2',name:'1a'}]},
{key:'2',name:'bb'},
{key:'3',name:'cc',children:[{key:'c1',name:'c1'},{key:'c2',name:'c2',children:[{key:'xx',name:'ww'}]}]},
]
this.calMath(key,arr) {
	arr.forEach(item => {
		if (item.key === key) {// 找到直接赋值
            result = item.name;
          } else if (item.children && item.children.length > 0) {// 未找到且有children数组时去该数组遍历查询
            calMath(key, item.children);
          }
        })
	})
}

// 调用查询key
var result = nul;
this.calMath('xx',testArr) // result=ww

小知识:递归并不能提高程序性能,但程序可能更容易理解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值