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