我有一些代码行我无法理解代码是如何执行的,我的意思是程序流程。
代码:
1) public class RecurLoopTest {
2) public static void main(String[] args) {
3) printit(2);
4) }
5) private static int printit(int n){
6) if(n>0){
7) printit(--n);
8) }
9) System.out.print(n+",");
10) return n;
11) }
12) }
我认为输出应该是: 0,
但输出是: 0,0,1,
我在类里面做了很多次 DEBUG, 我在调试时看到的流程:
- 从第 3 行开始执行,即以 2 作为参数调用 printit()。
- 第 6 行,如果条件检查
n
值是否大于零,则控制转到第 7 行,即 print() 通过将 n 值递减一次来再次调用。 - step 2 继续执行直到n值变为0,如果条件为假,则执行第6行。所以在第 9 行,SYSO 打印 0。
- 然后,无法理解,控件如何再次从第 10 行转到第 5 行??
最佳答案
在这个程序中 printit()
被调用了三次。
how the control again goes from line 10 to 5 ??
控制流程如下:
printit(0)
--n=0
,打印"0,"
,返回0printit(1)
--n=1
,打印"0,"
,返回0printit(2)
--n=2
,打印"1,"
,返回1main()
所以输出是: 0,0,1,
为了更好地理解,在调试时在 return 语句中放置一个断点。
这是控制/内存流程图:
编辑 1:或者 below图片说明:
关于java - 这个递归循环代码是如何执行的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038993/