所以我正在努力学习如何通过Java利用递归。我编写了一个简单的程序,将 1 和 n 之间的所有数字相加,它看起来可以完成它的工作。我感到困惑的是 print 语句,它打印了 4 次(对于解决方案的每个较小部分的每个结果),并且我很困惑如果再次调用该方法并且条件尚未满足,它如何到达 print 语句。我知道可以通过在 main 方法中创建一个 int 变量并将返回值分配给它来规避这一点。
public static void main(String[] args) {
int sum = recursiveCall(5);
}
public static int recursiveCall(int num) {
int sum = 0;
if(num == 1) {
sum = 1;
System.out.println(sum);
return sum;
}
else {
sum = recursiveCall(num - 1) + num;
}
// Notice it prints out all results of sum, not just the final value.
System.out.println(sum);
return sum;
}
最佳答案
我画了一个序列图,希望这可以解释递归过程。
递归有一个追溯过程,在调用递归方法之前,下一个命令将被插入调用堆栈。
所以我们可以简单地说,System.out.println
将在recursiveCall
之前被推送到调用堆栈,然后在recursiveCall
返回后,主进程将继续堆栈顶部的命令是 System.out.println
。
关于java - 递归方法打印 4 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45395773/