Java Recursion Flow of execution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
在这里努力理解执行流程。
在if子句中,当m = n时,在1 = 1的情况下,它返回n = 1,但是从这里直接进行int递归的声明,然后该n变为2。我不知道发生了什么。
您的程序将递归调用
为了更好地理解,我在您的程序中添加了
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 |
如果
等等
我想我没错。.当它返回时,它使堆栈松开。 即使我弄错了#10和#11步骤,您也应该了解总体思路。