递归算法应用

原创 2016年10月21日 08:39:19

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

输入:{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");
}

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java递归算法应用

递归: 就是函数自身调用自身。 什么时候用递归呢? 当一个功能被重复使用,而每一次使用该功能时的参数不确定,都由上次的功能元素结果来确定。 简单说: 功能内部又用到该功能,但是传递的...

递归算法在Java中的应用(Java遍历文件夹)

来源:http://www.fourants.com/blog/145.html 代码:TraverseFolder.java import java.io.File; /* * ...

递归算法,及其在树形结构中的应用

1.递归算法一定要注意必须存在递归出口 示例如下:求N!   我们从例子中归纳如8!=7!*8,归结方法为 Multiply(n)=Multiply(n-1)*n 代码如下: namespace...

ASP.Net应用递归算法案例

案例需求:动态将一个公司各个部门按照部门顺序排列,在页面动态生成列表,并且子级部门需要比父级部门缩进20px。 页面代码: 后台代码: 1、 public cla...

递归算法原理分析及应用

递归算法原理(一)定义 递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。 一个函数直接或间接调用自己本身,这种函数叫递归函数。 递归能使程序变得简洁和清晰...

上机作业之树:递归算法在二叉树中的简单应用

简单数据结构操作

递归算法的应用(迷宫)

题目:给定一个m*n的迷宫,找到任意两个点之间的路径!如图所示 这是一个10*10的矩阵,标记为0的代表不可以走,1代表可以走,找出起点(1,1)到终点(8,8)的路径。 解题思路:对于任...

递归算法在实际项目中的应用

概述: 最近发现,递归算法在实际项目开发中的应用非常广泛,就最近的一个项目中四次用到了递归算法,因此举出项目开发中的一个例子作为讲解。 递归算法的思想: 递归算法是把问题转化为规模缩小了的同类问题的子...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)