Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで数値の階乗を計算するプログラム:再帰と反復の2つのアプローチを解説

本記事では、与えられた問題文に対する解決策とアプローチについて学びます。

問題の定義

問題文: n の階乗(factorial)を計算することがタスクです。

非負整数 n の階乗は、以下のように定義されます。

n! = n × (n-1) × (n-2) × (n-3) × … × 3 × 2 × 1

例えば、6 の階乗は「6! = 6 × 5 × 4 × 3 × 2 × 1 = 720」となります。また、0 の階乗は定義により 1 とみなされます。

この問題には、主に以下の2つの解法があります。

  • 再帰的アプローチ(Recursive)
  • 反復的アプローチ(Iterative)

アプローチ1:再帰的アプローチ

再帰を使う方法では、関数が自分自身を呼び出しながら、n を1ずつ減らしていき、ベースケース(n が 0 または 1 のとき)に到達した時点で 1 を返します。

コード例

def factorial(n): # 再帰による解法
    if (n == 1 or n == 0):
        return 1
    else:
        return n * factorial(n - 1)

# メイン処理
num = 6
print("Factorial of", num, "is", factorial(num))

実行結果

('Factorial of', 6, 'is', 720)

この例では、すべての変数がグローバルスコープで宣言されています。

ポイント: 再帰的な実装はコードが簡潔で数学的な定義に近いというメリットがありますが、n が大きくなると再帰呼び出しの深さが増し、Pythonのデフォルトの再帰上限(通常1000回)に達する可能性がある点に注意が必要です。

アプローチ2:反復的アプローチ

反復を使う方法では、ループ処理によって 2 から n までの値を順番に掛け合わせていきます。再帰呼び出しを行わないため、大きな n に対しても安全に動作します。

コード例

def factorial(n): # 反復による解法
    fact = 1
    for i in range(2, n + 1):
        fact = fact * i
    return fact

# メイン処理
num = 6
print("Factorial of", num, "is", factorial(num))

実行結果

('Factorial of', 6, 'is', 720)

こちらも同様に、変数はグローバルスコープで宣言されています。

まとめ

本記事では、数値 n の階乗を計算する2つのアプローチ(再帰・反復)について学びました。

  • 再帰的アプローチ: コードが簡潔で直感的だが、大きな n では再帰深度の制限に注意。
  • 反復的アプローチ: ループで計算するためメモリ効率が良く、大きな n でも安定して動作する。

用途や入力サイズに応じて、適切な手法を選択するとよいでしょう。

  1. n番目のフィボナッチ数を求めるPythonプログラム【再帰・動的計画法】

    本記事では、n番目のフィボナッチ数を計算するPythonプログラムについて解説します。フィボナッチ数とは?フィボナッチ数とは、次の漸化式で定義される数列のことです。Fn = Fn-1 + Fn-2ただし、初期値は F0 = 0、F1 = 1 とします。フィボナッチ数列の最初のいくつかの値は以下の通りです。0, 1, 1, 2, 3, 5, 8, 13, ..................フィボナッチ数は、再帰と動的計画法(Dynamic Programming)という2つの代表的な手法で求めることができます。それでは、それぞれの実装方法をPythonスクリプトで見ていきましょう。方法1:再帰

  2. Pythonでn番目のカタラン数を計算するプログラム|再帰法と動的計画法

    本記事では、n番目のカタラン数を計算する方法について解説します。 カタラン数(Catalan number)は、次の漸化式で定義される自然数の数列です。 $$C_{0}= 1,\quad C_{n+1}=\displaystyle\sum\limits_{i=0}^n C_{i}C_{n-i}\quad (n \geq 0)$$ n = 0, 1, 2, 3, … に対するカタラン数は、1, 1, 2, 5, 14, 42, 132, 429, … と続きます。 カタラン数は、再帰法と動的計画法のどちらのアプローチでも求めることができます。それでは、それぞれの実装方法を見ていきましょう。 方法