[英]Java Recursion Flow of execution
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()
语句。
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;
}
}
程序流程会像
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,这就是它的作用:
prod(1, n -1)
prod(1, n -1)
prod(1, n -1)
我想我没错。.当它返回时,它使堆栈松开。 即使我弄错了#10和#11步骤,您也应该了解总体思路。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.