java递归算法提前返回值带出
/** * */ package testJava.java.foreach; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Queue; import java.util.Stack; /** * @author jhuang.sjtu * @function 测试循环嵌套函数返回值 递归算法 * @date 2017年4月12日 * @version */ public class TestForeach { public int starta(int j,Map<String,Integer> re){ int k = -2; for (; j < 11; ) { int i = get(j); if(i == -1){ break; //跳出 } k = dothing(i,j); System.out.println(j+" re="+re.get("k")); re.put("k", k); if(k != 0){ // return starta(++j,re); starta(++j,re); //是否带return都一样~ } break; } k=re.get("k"); return k; } public int startb(int j,ArrayList<Integer> re){ int k = -2; for (; j < 11; ) { int i = get(j); if(i == -1){ break; //跳出 } k = dothing(i,j); re.add(k); // if(re.size()!=0) System.out.println(j+" k~"+k); for (Integer integer : re) { System.out.println("rrr="+integer); } if(k != 0){ // return starta(++j,re); startb(++j,re); //是否带return都一样~ } break; } System.out.println("@j="+j); k=re.get(re.size()-1); //最后一个 return k; } public int startc(int j,Queue<Integer> re){ int k = -2; for (; j < 11; ) { int i = get(j); if(i == -1){ break; //跳出 } k = dothing(i,j); re.add(k); // if(re.size()!=0) System.out.println(j+" k~"+k); for (Integer integer : re) { System.out.println("rrr="+integer); } if(k != 0){ // return starta(++j,re); startc(++j,re); //是否带return都一样~ } break; } System.out.println("@j="+j); // k=re.get(re.size()-1); //最后一个 k=re.peek(); //返回第一个元素 return k; } public int startd(int j,Stack<Integer> re){ int k = -2; for (; j < 11; ) { int i = get(j); if(i == -1){ break; //跳出 } k = dothing(i,j); // re.add(k); re.push(k); // if(re.size()!=0) System.out.println(j+" k~"+k+",re="+re); for (Integer integer : re) { System.out.println("rrr="+integer); } if(k != 0){ // return starta(++j,re); startd(++j,re); //是否带return都一样~ } break; } System.out.println("@j="+j); // k=re.get(re.size()-1); //最后一个 k=re.lastElement(); return k; } private int dothing(int i, int j) { // if(i== -1){ // return 0; // }else{ System.out.println("j="+j); return j; // } } private int get(int j) { if(j<=2){ return 0; }else{ return -1; } } /** * @param args */ public static void main(String[] args) { TestForeach t = new TestForeach(); //Map测试 // System.out.println("last="+t.starta(1,new HashMap<String, Integer>())); //List测试 // System.out.println("last="+t.startb(1,new ArrayList<Integer>())); //按次序的 /*List<Integer> ls = new ArrayList<Integer>(); ls.add(1); ls.add(2); ls.add(3); ls.add(4); ls.add(5); for (Integer integer : ls) { System.out.println(integer); }*/ //队列 System.out.println("last="+t.startc(1,new LinkedList<Integer>())); //堆栈 // System.out.println("last="+t.startd(1,new Stack<Integer>())); } }