我在网上找到了此递归示例,但我不了解其中发生了什么。

public class MysteryClass {
    public static void mystery(int n) {
        if (n > 0) {
            mystery(n-1);
            System.out.println(n * 4);
            mystery(n-1);
        }
    }
    public static void main(String[] args) {
        MysteryClass.mystery(2);
    }
}

输出是
4
8
4

我了解的是
  • 2大于0
  • 2-1 = 1
  • 1大于0
  • 1-1 = 0
  • 0不大于0
  • 现在我们跳到这一行:System.out.println(n * 4);
  • 1 * 4 = 4
  • 2 * 4 = 8
  • 在这里,我不明白为什么我会再得到一个“4”的输出

  • 步骤9中发生了什么?

    我使用了调试器,但仍然不明白。

    最佳答案

    MysteryClass.mystery(2);
        if (2 > 0) (true) ---> mystery(2-1);
        |   if(1 > 0) (true) ---> mystery (1-1); // Action (A)
        |   |   if(0 > 0) (false) ---> // do nothing
        |   |
        |   System.out.println(1 * 4);
        |   mystery(1-1);
        |
        System.out.println(2 * 4);
        mystery(2-1); ---> // repeat action (A)
    

    关于java - 递归方法如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34001811/

    10-10 16:32