[英]Factorial Recursion, answer doesn't make sense on paper?
所以我在codingbat上做遞歸練習,我遇到了這個
public int factorial(int n) {
if (n == 1) {
return 1;
}
return n * factorial(n-1);
}
我不明白這在紙上是如何運作的。 因為 1 返回 1 很好,2 返回 2,很好,3 返回 6 很好,但是 factorial(4) 返回 24? factorial(5) 返回 120?
這沒有意義,因為它是從我假設的 n 的最后一個答案開始的,但沒有減去 1? 但是通過了所有的測試。 所以它是 6*4 = 24,而不是不等於 24 的 4x(n-1)? 幫助?
對於任何階乘(n),計算為 nx (n-1) x (n-2) x ... x 1
所以對於階乘(4),這將是 4 x 3 x 2 x 1 = 24
遞歸主要以階乘為例介紹,因此可視化它看起來像
fact(4) = 4 x fact(3)
= 4 x 3 x fact(2)
= 4 x 3 x 2 x fact(1)
= 4 x 3 x 2 x 1 = 24
遞歸重復,直到它遇到“錨點”,這是 1 的基本情況
當您試圖理解遞歸時,最好描繪一個堆棧。 每次調用return n * factorial(n - 1)
我們都會將一個值向下推入堆棧,以便在計算完factorial(n - 1)
調用后可以檢索它。 等等等等。
factorial(5)
= 5 * factorial(4)
= 5 * 4 * factorial(3)
= 5 * 4 * 3 * factorial(2)
= 5 * 4 * 3 * 2 *factorial(1)
= 5 * 4 * 3 * 2 * 1
= 120
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.