java - 这个递归循环代码是如何执行的

标签 java recursion

我有一些代码行我无法理解代码是如何执行的,我的意思是程序流程。

代码:

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, 我在调试时看到的流程:

  1. 从第 3 行开始执行,即以 2 作为参数调用 printit()。
  2. 第 6 行,如果条件检查 n 值是否大于零,则控制转到第 7 行,即 print() 通过将 n 值递减一次来再次调用。
  3. step 2 继续执行直到n值变为0,如果条件为假,则执行第6行。所以在第 9 行,SYSO 打印 0。
  4. 然后,无法理解,控件如何再次从第 10 行转到第 5 行??

最佳答案

在这个程序中 printit() 被调用了三次。

how the control again goes from line 10 to 5 ??

控制流程如下:

  • printit(0) -- n=0,打印"0,",返回0
  • printit(1) -- n=1,打印"0,",返回0
  • printit(2) -- n=2,打印"1,",返回1
  • main()

所以输出是: 0,0,1, 为了更好地理解,在调试时在 return 语句中放置一个断点。

这是控制/内存流程图: enter image description here

编辑 1:或者 below图片说明: enter image description here

关于java - 这个递归循环代码是如何执行的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038993/

相关文章:

java - Tomcat 7、Weld、RESTEasy 不扫描 JAR

java - 为什么我的阵列在重新启动 Activity 后重新工作?

java - AssertJ 断言原因消息

Java - 复杂的递归回溯

c - 在 printf 语句中插入 'n' 制表符

java - 从监听器中获取 DefaultMessageListenerContainer

java - Emacs-公司 : An error occurred in auto-begin Invalid function

Python合并函数数组范围错误?

python - python字典的递归深度

java - 递归地生成功率集,没有任何循环