この記事では、Pyhtonで階乗を計算・取得する方法を解説します。
階乗とは「ある正の整数から1までの積のこと」です。
主に順列などの組合せ論に使用されます。
それでは、Pythonで階乗を計算する方法を見ていきましょう!
階乗とは?
階乗とは、「ある正の整数から1までの積」のことです。
4の階乗と言われたら 4 * 3 * 2 * 1
となり、答えは 24
です。
また、階乗は!
で表現されます。4の階乗は以下の通りです。
4! = 4 * 3 * 2 * 1 = 24
ちなみに、Pythonで4!
と記述してもSyntaxError
になるので注意してください。
階乗を取得する
階乗を取得するにはmath
モジュールのfactorial()
関数を使うのが一番です。
import math
math.factorial(x)
factorial()
関数は、x
引数の階乗を整数で返します。
import math
print(math.factorial(4))
実行結果
24
整数以外や負の値を指定するとValueError
が送出されます。
また、Python 3.9からfloat型の整数値(1.0や10.0など)も非推奨となったので注意が必要です。Python 3.9ではエラーにはならないが、以下のような警告が出力される。
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
Python 3.10では、TypeError: 'float' object cannot be interpreted as an integer
となる。
階乗を計算するプログラム
それでは、階乗を計算するプログラムを実装してみましょう。
- 渡された整数から1までの積
- 0が渡された場合は1を返す
ループを使った階乗
for
文やwhile
文などの反復処理を使うことで階乗を求めることができます。
以下の関数では、引数の値が整数型でない、または負の値だった場合は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==0 or x==1) else x * factorial(x - 1)
print(factorial(4))
実行結果
24
上記コードでは、三項演算子を使って渡された値が0と1の時に1を返し、それ以外の場合はx * factorial(x - 1)
を返します。
この関数の問題点として再帰関数は再帰できる回数が決められているので大きい値を指定されるとRecursionError
が発生します。
まとめ
この記事では、Pythonで階乗を計算・取得する方法を解説しました。
学習のために色々な計算方法を見ていきましたが、基本的には用意されている関数の方が早いので、ただ単に階乗を取得する場合にはmath.factorial()
関数を使いましょう!
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ