Python

【Python】階乗を計算・取得する方法

この記事では、Pyhtonで階乗を計算・取得する方法を解説します。階乗は、主に順列などの組合せ論に使用されます。それでは、Pythonで階乗を計算する方法を見ていきましょう!

階乗とは?

階乗とは、「ある正の整数から1までの積」のことです。

4の階乗と言われたら4 * 3 * 2 * 1となり、答えは24です。

また、階乗は「!」で表現されます。4の階乗は以下の通りです。

4! = 4 * 3 * 2 * 1 = 24

ちなみに、Pythonで4!と記述してもSyntaxErrorになるので注意。

print(4!)

実行結果

File "/Users/user/Desktop/Python/test.py", line 1
    print(4!)
           ^
SyntaxError: invalid syntax

階乗を取得する

階乗を取得するにはmathモジュールのfactorial()関数を使うのが一番です。

import math

math.factorial(x)

factorial()関数は、x引数の階乗を整数で返します。

import math

print(math.factorial(4))

実行結果

24

整数以外や負の値を指定するとValueErrorが送出されます。

また、Python3.9から整数値のfloat(1.0や10.0など)も非推奨となったので注意が必要です。Python3.9.0では、エラーにはならないが警告が出力される。

import math

print(math.factorial(4.0))

実行結果

/Users/user/Desktop/Python/test.py:3: DeprecationWarning: Using factorial() with floats is deprecated
  print(math.factorial(4.0))
24

mathモジュールは、cpyhtonで書かれているためPythonで書かれたコードよりかなり高速です。

階乗を求めるプログラム

それでは、試しに階乗を計算するプログラムを作成してみましょう!

階乗のポイント
  • 渡された値から1までの積
  • 0は1を返す

ループを使った階乗

for文やwhile文などの反復を使って階乗を求めることができます。

以下のコードでは、if文を使って分岐させ、引数の値が整数型でない、または負の値だった場合はValueErrorを送出させ、0と1の時は1を返し、それ以外の場合はwhile文を使って階乗を計算し、返しています。

def factorial(x):
    # 非整数型、または負の値の場合はValueError
    if not isinstance(x, int) or x < 0:
        raise ValueError

    # 0と1の時は1を返す
    elif x < 2:
        return 1
    
    # それ以外の時は階乗を計算して返す
    else:
        r = 1
        while x > 1:
            r *= x
            x -= 1
        return r

print(factorial(4))

実行結果

24

再帰関数を使った階乗

再帰関数とは、関数内で自身の関数を呼び出す関数のことを言います。再帰関数を使うことでも階乗を求めることができます。

def factorial(x):
    return 1 if x < 2 else x * factorial(x - 1)


print(factorial(4))

実行結果

24

上記コードでは、三項演算子を使ってx < 2の時に1を返し、それ以外の場合はx * factorial(x - 1)を返します。

まとめ

この記事では、Pythonで階乗を計算・取得する方法を解説しました。

学習のために色々な計算方法を見ていきましたが、基本的には用意されている関数の方が早いので、ただ単に階乗を取得する場合にはmath.factorial()関数を使いましょう!

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

【Python】順列・組み合わせ・重複組み合わせ・デカルト積を取得する方法 この記事では、Pythonで順列(Permutation)と組み合わせ(Combination)を計算する方法を解説します。順列...
最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』