递归算法应用

1 篇文章 0 订阅

获取完整的地区名称,包括上级省市。

输入:{regioncode=140121,regionname=清徐县}
输出:中国-山西-太原-清徐

/**
* 获取完整省市名称
* @param region{regioncode=140121,regionname=清徐县}
* @return 中国-山西-太原-清徐
*/
  private String getFullRegionName(Map region) {
      if(region.get("regioncode")==null) return "";
      String endRegionCode = "100000";//中国为结束节点
      if(endRegionCode.equals(region.get("regioncode"))){
          return (String) region.get("regionname");
      }else{
          Map parentRegion = mallDao.getParentRegion((String)region.get("regioncode"));//自己获取上级省市的代码
          return getFullRegionName(parentRegion)+"-"+region.get("regionname");
      }
  }

public static void main(String[] args) {
        CoalMallService instance = (CoalMallService) CoalMallService.getInstance();
        Map region = new HashMap();
        region.put("regioncode","140121");
        region.put("regionname","清徐县");
        String fullRegionName = instance.getFullRegionName(region);
        System.out.println(fullRegionName);
    }

获取树形数据

输入:140000 //山西
输出:[{
REGIONCODE=140100,
REGIONNAME=太原市,
isparent=true,
children=[{
REGIONCODE=140105,
REGIONNAME=小店区
},
{
REGIONCODE=140106,
REGIONNAME=迎泽区
},……

private List getFullChildRegions(String regionCode){
    List<Map> regions = mallDao.getRegions(regionCode);//根据上级地区编码获取下级地区列表
    if(CollectionUtils.isEmpty(regions)){
        return regions;
    }else{
        for(Map map:regions){
            List regions2 = getFullChildRegions((String) map.get("regioncode"));
            if(CollectionUtils.isNotEmpty(regions2)){
                map.put("isparent", true);
                map.put("children", regions2);
            }
        }
    }
    return regions;
}

public static void main(String[] args) {
        CoalMallService instance = (CoalMallService) CoalMallService.getInstance();
        List list = instance.getFullChildRegions("140000");
        System.out.println(list);
    }

另一个版本:获取完整的地区名称,包括上级省市

    /**
     * 获取完整省市名称
     * @param region {regioncode=141000,regionname=临汾市}
     * @return 中国 山西省 临汾市
     */
    private String getFullRegionName(Map region) {
        if(region.get("regioncode")==null) return "";
        String fullRegionName = (String) region.get("regionname");
        String rootRegionCode = "100000";
        Map<String,String> parentRegion = mallDao.getParentRegion((String)region.get("regioncode"));
        if(parentRegion==null) return fullRegionName;
        if(rootRegionCode.equals(parentRegion.get("regioncode"))){
            fullRegionName = parentRegion.get("regionname")+" "+fullRegionName;
        }else{
            fullRegionName = getFullRegionName(parentRegion)+" "+fullRegionName;
        }
        return fullRegionName;
    }

这是重构getFullRegionName方法前的写法,是不成熟,没理解递归的写法。对比和重构后的写法,要注意的是:
1,首先理解递归出口。

if(endRegionCode.equals(region.get("regioncode"))){
      return (String) region.get("regionname");
}

2,根据递归出口,循环递归。

else{
    Map parentRegion = mallDao.getParentRegion((String)region.get("regioncode"));//自己获取上级省市的代码
    return getFullRegionName(parentRegion)+"-"+region.get("regionname");
}

参考资料:
递归算法
递归算法及经典递归例子代码实现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值