【发布时间】:2014-03-14 06:15:00
【问题描述】:
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。我不明白发生了什么.
【问题讨论】:
-
调用堆栈“展开*”,您会看到与前一个堆栈帧(调用刚刚返回的函数)相同的 n。也就是说,每次调用
prod时都有一个 new n 局部变量,其值不受任何其他prod调用的影响。 -
奇怪的是,递归正在计算
n! / (m-1)!- 鉴于 m n 无限递归会产生 StackOverflow :)
标签: java recursion execution flow