【Python】階乗をfor文で計算する

【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

フィボナッチ数列との関係

フィボナッチ数列の近似には階乗が関係する場合があります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です