递归问题的应用

目录

背景:

 题目:

考察点:

解答 :


背景:

在最近一次的刷题中,遇到了有关递归方面的问题,对其进行了深入的研究

 题目:

function findRegion(regions, regionName) {
  // TODO: 在这里写入具体的实现逻辑
  // 需要从树状结构的行政信息中,遍历找到目标区域的行政信息,如输入:成都市,返回 [四川省,成都市]
  // 如果所输入的位置信息不存在,则返回 null
}

module.exports = findRegion; // 检测需要,请勿删除

本题主要考察根据用户输入的地址信息进行自动补全的功能。

  • 如果能找到具体的地址信息,则以数组形式返回它的完整行政信息,比如:
    • 输入"青羊区", 则返回 [ "四川省", "成都市", "青羊区" ]
    • 输入"成都市", 则返回 [ "四川省", "成都市" ]
    • 输入"四川省", 则返回 [ "四川省" ]
  • 如果不存在该地址,则返回一个 null

其中regions是地区数据,regionName是所输入的地址信息

考察点:

本题主要考察了递归的使用

递归就是函数自己调用自己。是循环运算的一种算法模式。常用于解决一些数学运算,如阶乘函数,幂函数,和斐波那契数列

使用时需要注意以下两个部分:

 1.   递归调用的过程

 2.   递归终止的条件(出口)

在没有限制的条件下,递归运算会无终止地自身调用,所以在递归运算中要结合条件语句(if)进行控制,只有在某个条件成立

时候才允许执行递归,否则不允许调用自身

递归就是

    走到出口的时候,再向上一步一步的赋值计算后,返回结果。

总结:递归的两个重要因素:

    递归调用的过程。

    递归终止的条件(出口)。把问题一层一层的分解下去,但不能无限循环下去

    注意:递归容易堆栈溢出。递归非常耗费内存,因为需要同时保存成千上百个调用帧,当数据规模较大的时候很容易发生“栈溢出”错误。所以要谨慎使用递归

解答 :

function findRegion(regions, regionName) {
  // TODO: 在这里写入具体的实现逻辑
  // 需要从树状结构的行政信息中,遍历找到目标区域的行政信息,如输入:成都市,返回 [四川省,成都市]
  // 如果所输入的位置信息不存在,则返回 null

  let obj = [];
  
   function getsj(regions, regionName) {
    for (let re of regions) {
    
      console.log(re);
     
      if (re.name == regionName) {//当找到信息地址时返回(递归的出口)
      return  obj.push(re.name);
      } else {
       
        getsj(re.children, regionName);
      } 
       console.log(obj.length);
      if(obj.length){//递归完成后结束后会继续向上一层一层执行
        obj.unshift(re.name)
        return;
      }
    }
  };
  getsj(regions,regionName);
 
  if(obj.length==0){
    return null;
  }
  return obj;
}

module.exports = findRegion; // 检测需要,请勿删除

本文主要讲解了有关递归在平时应用的使用 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端VC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值