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

}
原文地址:https://www.cnblogs.com/simpledev/p/6702013.html