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 でも安定して動作する。
用途や入力サイズに応じて、適切な手法を選択するとよいでしょう。
-
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:再帰
-
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, … と続きます。 カタラン数は、再帰法と動的計画法のどちらのアプローチでも求めることができます。それでは、それぞれの実装方法を見ていきましょう。 方法