一尘不染

请逐步解释递归

java

请分步说明递归;

public class TestClass {

    private static void printit(int i) {
        if (i == 1) {
            return;
        }
        System.out.println(i);
        printit(i / 2);
        printit(i / 2);
    }

    public static void main(String args[]) {
        int i = 8;
        printit(i);
    }
}

阅读 223

收藏
2020-12-03

共1个答案

一尘不染

如果您使用的是IDE,则可以使用调试器,亲眼看看发生了什么。

无论如何,让我们尝试一下,当调用递归方法时会发生什么:您使用8(printit(8);)调用该方法:

  1. System.out.println(8); -> 8
  2. printit(8 /2 ); ->以8/2 = 4再次调用方法
  3. System.out.println(4); -> 4
  4. printit(4 /2 ); >以4/2 = 2再次调用方法
  5. System.out.println(2); -> 2
  6. printit(2 /2 ); >用2/2 = 1再次调用方法
  7. return;->继续上一个通话,(printit(4 /2);
  8. printit(2 /2 ); >用2/2 = 1再次调用方法
  9. return;->继续上一个通话,(printit(4 /2);
  10. 方法完成,继续上一个调用(printit(8 /2);
  11. printit(4 /2 ); >以4/2 = 2再次调用方法
  12. System.out.println(2); -> 2
  13. printit(2/2);我们已经知道的呼叫不会产生任何结果。
  14. 现在我们在第一次调用一遍,printit(8);,呼吁printit(8/2);
  15. System.out.println(4); -> 4
  16. 16等…
2020-12-03