簡體   English   中英

階乘遞歸,答案在紙上沒有意義?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM