【Python】階乗をfor文で計算する
目次
階乗とは?
階乗(factorial)は、数学で頻繁に登場する概念で、ある自然数 n
に対して 1
から n
までの整数をすべて掛け合わせたものです。
一般的に、n
の階乗は n!
と表記され、次のように定義されます。
n! = n × (n-1) × (n-2) × ... × 1
- 特別なケースとして
0! = 1
である
例えば:
5! = 5 × 4 × 3 × 2 × 1 = 120
3! = 3 × 2 × 1 = 6
for文を使った階乗の計算
Pythonでは、for
文を使用して階乗を計算できます。基本的な方法は、1から n
までの値を順に掛けていくことです。
def factorial(n):
result = 1
for i in range(1, n + 1):
result *= i
return result
print(factorial(5)) # 120
具体例
以下に、さまざまな値での実行例を示します。
小さい値での計算
factorial(3) = 6
factorial(4) = 24
大きい値での計算
factorial(10) = 3,628,800
factorial(20) = 2,432,902,008,176,640,000
効率的な計算方法
大きな数の階乗を計算する際、次のような最適化が考えられます。
再帰を使う方法
def factorial_recursive(n):
if n == 0 or n == 1:
return 1
return n * factorial_recursive(n - 1)
print(factorial_recursive(5)) # 120
ライブラリを使う方法
Pythonの math
モジュールには、組み込みの factorial()
関数があります。
import math
print(math.factorial(5)) # 120
よくある間違い
階乗計算での典型的なエラーを紹介します。
ゼロの場合の処理ミス
0! = 1
であることを忘れると、エラーが発生する可能性があります。
負の数での計算
階乗は負の整数には定義されていません。負の数で計算しようとするとエラーになります。
def factorial(n):
if n < 0:
raise ValueError("負の数の階乗は定義されていません")
result = 1
for i in range(1, n + 1):
result *= i
return result
階乗の応用
階乗はさまざまな分野で使用されます。
組み合わせと順列
組み合わせ(nCr)や順列(nPr)の計算に利用されます。
def combination(n, r):
return factorial(n) // (factorial(r) * factorial(n - r))
def permutation(n, r):
return factorial(n) // factorial(n - r)
print(combination(5, 2)) # 10
print(permutation(5, 2)) # 20
確率と統計
階乗は確率論や統計学のさまざまな分野で使用されます。例えば、ポアソン分布の確率質量関数(PMF)は次のように表されます:
import math
def poisson_pmf(lmbda, k):
return (math.exp(-lmbda) * lmbda**k) / math.factorial(k)
print(poisson_pmf(3, 2)) # 0.2240
フィボナッチ数列との関係
フィボナッチ数列の近似には階乗が関係する場合があります。