日期:2014-05-20  浏览次数:20712 次

JAVA实现 递归算法
大家好!
现在有个需求,想用java实现一个递归算法。

需求是这样的 假如有两个数组  1,1,2     2,4,3

我想遍历@arr1作为根,最后实现类似oracle 的connect by

两列:
root_id   id
1           2
1           4
2           3
4           5
5           6
把所有通路找出来,通路的顺序无所谓,只要找出来所有的通路就成。
想要的效果是打印如下内容:(root_id 和id的所有关系都打印出来)
1,2
1,2,3
1,4
1,4,5
1,4,5,6
2,3
4,5
4,5,6
5,6



当然,这只有5,6个元素的数组,道理是一样的,我库里的元素有200多个不到300个,而且有的层次很深,一个根延伸出来10几万的叶子,我用oracle connect by 进行递归经常几个小时也算不完,而且内存消耗过大
,所以想用java来实现,不知道能不能处理,请大侠们帮忙。

谢谢了。

补充一下,两个数组可能有回路,还需要规避回路情况,类似oracle nocycle connect by.

------解决方案--------------------
package csdn;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class DiGui {
static Map<Integer, Integer> map=new <Integer, Integer>();
static String path="";
 static{
     //map.put(1, 2);
     map.put(1, 4);
     map.put(2, 3);
     map.put(4, 5);
     map.put(5, 6);
 }
 
 public static void doMap(){
 for(Integer key : map.keySet()){
 doRecursive(key);
 }
 }
 /**
  * 递归运算
  * @param index
  */
 public static void  doRecursive(Integer index){
 Integer value=map.get(index);
 if(value!=null){
path=path.equals("")?index+","+value:path+","+value;
System.out.println(path);
doRecursive(value);
 }
 else{
 path="";
 }
 }
/**
 * @param args
 */
public static void main(String[] args) {
doMap(); 
}

}

1,4
1,4,5
1,4,5,6
2,3
4,5
4,5,6
5,6