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