任何人都可以解释以下递归是如何工作的?

时间:2014-11-07 05:19:13

标签: java recursion

我在理解以下递归代码时遇到一些麻烦:

public class recursive {
    public static void main(String[] args){ 
        helper(0) ;
    }

    public static void helper(int i){
        int a=3;
        if(i==a){
            System.out.println("yes:"+i);
            return;
        }else{
            for(;i<a;i++){ 
                System.out.println("no:"+i);
                helper(i+1);
                System.out.println("end:"+i);
            }
        }
    }         
}

输出如下:

no:0
no:1
no:2
yes:3
end:2 //why this is 2?
end:1 //why this is 1?
no:2
yes:3
end:2
end:0
no:1
no:2
yes:3
end:2
end:1
no:2
yes:3
end:2

我不明白为什么第一个结尾是2.任何人都可以解释递归在这个简单程序中是如何工作的吗?

2 个答案:

答案 0 :(得分:1)

public static void helper(int i){
    int a=3;
    if(i==a){
        System.out.println("yes:"+i);
        return;
    }else{
        System.out.println("no:"+i);
        helper(i+1);
    }
}  

递归的一个想法是取消循环

答案 1 :(得分:1)

helper的每次调用都有自己的本地值i

因此,当i==2,并且您致电helper(i+1)时,对helper的下一次调用有i==3,但当它返回时,它会回到之前的helper调用,i==2