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;
}
}
努力了解这里的执行流程。Java递归执行流程
在if子句中,当m = n时,在1 = 1的情况下,它返回n = 1,但是从这里直接返回到int recurse的声明,然后同样的n变成2.我不明白是什么发生了。
调用栈“开卷*,你会看到相同的N如前面堆栈帧(即所谓的刚刚返回的功能),即,每次调用'prod'时,都会有一个* new * n局部变量,其值不受任何其他'prod'调用的影响 – user2864740
奇怪的是,该递归正在计算'n!/(m-1)!' - 那m <= n, if m > n无限递归产生一个StackOverflow :) – DSquare