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 recurse的声明然后那个相同的n变为2.我不明白发生了什么
答案 0 :(得分:3)
您的程序将递归调用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
答案 1 :(得分:1)
如果m
为1而n
为4,那就是它的作用:
prod(1, n -1)
prod(1, n -1)
prod(1, n -1)
我认为我做对了..当它返回时,它会展开堆栈。即使我把#10和#11的步骤弄错了,你也应该得到一般的想法。