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>()));
    }

}
相關文章
相關標籤/搜索