Java递归执行流程

Java Recursion Flow of execution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {
    System.out.println(prod(1, 4));
}

public static int prod(int m, int n) {
    if (m == n) {
        return n;
    } else {
        System.out.println(n);
        int recurse = prod(m, n - 1);
        System.out.println(recurse);
        int result = n * recurse;
        return result;
    }
}

在这里努力理解执行流程。

在if子句中,当m = n时,在1 = 1的情况下,它返回n = 1,但是从这里直接进行int递归的声明,然后该n变为2。我不知道发生了什么。


您的程序将递归调用prod()函数,并将局部变量存储在堆栈中,直到m!=n。 一旦m等于n,它将开始执行存储在堆栈中的程序的剩余部分。

为了更好地理解,我在您的程序中添加了System.out.println()语句。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void main(String[] args) {
    System.out.println("Final Output in Main"+prod(1, 4));
}

public static int prod(int m, int n) {
    if (m == n) {
        System.out.println("Return Result:"+n);
            return n;
    } else {
        System.out.println("Print :"+n);
            int recurse = prod(m, n - 1);
        System.out.println("Print Recurse:"+recurse);
            int result = n * recurse;
        System.out.println("Return Result:"+result);
            return result;
    }
}

程序流程会像

1
2
3
4
5
6
7
8
9
10
11
Print : 4
Print : 3
Print : 2
Return Result: 1
Print Recurse: 1
Return Result: 2
Print Recurse: 2
Return Result: 6
Print Recurse: 6
Return Result: 24
Final Output in Main 24

如果m为1并且n为4,这就是它的作用:

  • 列印4
  • 致电prod(1, n -1)
  • 打印3
  • 致电prod(1, n -1)
  • 列印2
  • 致电prod(1, n -1)
  • 列印2
  • 列印4
  • 返回4
  • 列印4
  • 列印12
    等等
  • 我想我没错。.当它返回时,它使堆栈松开。 即使我弄错了#10和#11步骤,您也应该了解总体思路。