首先看一段代码:
@Test
public void test(){
fun(2);
}
//递归测试
public void fun(int n){
//第一句打印
System.out.println(n);
if(n<0){
return;
}else{
fun(n-1);
//第二句打印
System.out.println(n);
}
}
打印结果: 2, 1, 0, -1, 0, 1, 2
分析一下代码执行过程:
第一个打印语句会在进方法就调用,关键在于第二个打印语句在什么时候执行。
执行过程可以理解为fun(n-1)调用后,第二个打印语句会被压入栈中,直到n为-1时return;这个时候会从栈中取出打印语句执行,栈的特性是先进后出,所以先压入栈中的打印语句后执行;
图:
无论是打印语句,或是其它代码都会被压入栈中,当递归结束时从栈中取出代码执行