階乗の計算
$$n!=n(n-1)(n-2) \cdots 2 \cdot 1$$を階乗(factorial)といい、通常 $0!=1$ と定義される。階乗の計算を行うには以下のような再帰関数を自作すればよい。
これは負の値を入力するとエラーになる。「if x <= 0:」と不等号にすれば負の値については常に1を返し、小数を入れても無理やり計算するようになる(ただしこれは正しい値ではない)。
mathモジュールをインポートしてfactorial関数を利用する手もある。factorial関数の引数は非負整数しか受け付けない。
また、scipyライブラリが使える環境であればscipy.special.factorial()を利用することも可能である。第2引数にTrueを渡すと正確な値を出力する。
あるいは「from mpmath import *」として、mpmathライブラリのfactorial関数を用いることもできる。この関数では引数が巨大数の場合、スターリングの公式を使って階乗が概算される。小数を引数とする場合は大人しくガンマ関数を用いること。
二重階乗の計算
$$n!! =\begin{cases} n\,(n-2)\,(n-4) \cdots 3 \cdot 1\quad (n:\text{奇数}) \\
n\,(n-2)\,(n-4) \cdots 4 \cdot 2\quad (n:\text{偶数})\end{cases}$$を二重階乗(double factorial)といい、通常 $0!!=(-1)!!=1$ と定義される。階乗の計算を行うには以下のような関数を自作する。
最初の条件文が「if x <= 0:」となっている部分がポイント。
またはsympyライブラリを使えばfactorial2関数で二重階乗が計算可能である。
なお、mpmathライブラリと同様にsympyライブラリのfactorial関数でも階乗が計算できる。