我在理解以下递归代码时遇到一些麻烦:
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.任何人都可以解释递归在这个简单程序中是如何工作的吗?
答案 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
。