递归方法调用中内存细节以及代码运行顺序

递归方法调用中内存细节以及代码运行顺序

首先运行以下代码块,观察其运行结果,输出1234,4321而不是。

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test {
String name="你好";
public static void main(String []args){
Test test=new Test();
test.function(4);
}
public void function(int n){
if (n>1){
function(n-1);
}
System.out.println("n="+n);
}
}

img

我们来仔细看一下代码的运行情况以及运行顺序,可以发现在递归调用的过程中,会占用大量的空间。

image-20220417114354935

最后我们加深一下理解,运行一下以下代码,仅仅在方法区加上了一个else,发现结果仅仅输出了一个1,是因为在其他满足的条件下,就不会区执行输出语句了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Test {
String name="你好";
public static void main(String []args){
Test test=new Test();
test.function(4);
}
public void function(int n){
if (n>1){
function(n-1);
}
else{
System.out.println("n="+n);}
}
}

image-20220417114447564