1

質問のあるセクションへのリンク。Python を考える - 第 6 章、セクション 5

このコードは私を失いました。実行すると n! が見つかりますが、方法がわかりません。私が誤解していると思う部分は、「recurse = factorial(n-1)」の行です。

def factorial(n):
    if n == 0:
        return 1
    else:
        recurse = factorial(n-1)
        result = n * recurse
        return result
  1. それは関数を呼び出してトップに送り返しませんか?(明らかにそうではありませんが、理由はわかりません)。

  2. また、関数が因数の分解 (3! を 3、2、1、1 に) を終了した後、それらを乗算します。それらを覚えているのはどこですか?

これは簡単だと思いますが、困惑しました。

4

2 に答える 2

6

を実行すると、次のようになりますfactorial(3)

factorial(3)
  recurse = factorial(2)
    recurse = factorial(1)
      recurse = factorial(0)
        return 1
      return 1 * 1 = 1
    return 2 * 1 = 2
  return 3 * 2 = 6

したがって、再帰の各ステップでは、内側のステップの戻り値と の現在の値が得られnます。

于 2013-07-18T22:58:04.180 に答える
0

これに関連するスタック ダイアグラムは、 Think Python most usefulで見つかりました。

factorial(n) のスタック ダイアグラム

実際、自分で何度か再描画すると、再帰全体を突き止めるのに本当に役立ちます。

于 2014-09-09T03:04:16.873 に答える