递归算法应用

原创 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实现中缀转后缀,后缀计算值

本文主要内容: 表达式的三种形式中缀表达式与后缀表达式转换算法 一、表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3。我们从小做数学题时,一直使用的就是...

k-means聚类的缺点

转自http://www.cnblogs.com/emanlee/archive/2012/03/06/2381617.html Similar to other algorithm, K-me...
  • likelet
  • likelet
  • 2012年05月21日 17:07
  • 3877

递归算法原理分析及应用

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

C#--第2周实验--任务11--编写一个控制台应用--1列数规则如下:1,1,2,3,5,8,13,21,34...求第30位数是多少?(用递归算法实现)

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:一列...

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

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

Java递归算法应用

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

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

来源:http://www.fourants.com/blog/145.html 代码:TraverseFolder.java import java.io.File; /* * ...
  • ymc0329
  • ymc0329
  • 2011年08月23日 11:18
  • 3469

递归算法及DFS搜索的应用

递归算法,说白了就是程序调用自身的编程技巧的一种算法。         它能更好的实现一种反复执行的过程(调用自身的方式),能让一些反复循环的问题变得简单化,使之更好的让计算机运算出结果。 递归需...

ASP.Net应用递归算法案例

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

C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列、strlen的递归解法、汉诺塔和全排列递归算法。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:递归算法应用
举报原因:
原因补充:

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