reduce関数で階乗計算をしてみる

関数で遊んでばっかりだけど、これが最後かな。まだリスト内包表記もあるけど。
reduce関数は与えられた式とリストに対して、計算の結果と次の値をまた計算し、その結果と次の値をまた計算し…というのを繰り返してくれる関数。

前に階乗計算を

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

と書いたけど、reduce関数を使えばわずか、

def factorial(x):
return reduce((lambda x,y: x * y),range(1,x+1))

で済んじゃう。速度的なメリットもあるというし、分かりづらいコードにならないのであれば、こっちを使いたくなるのがプログラマ根性ってやつかな。

実行結果は以下。

>>> factorial(1)
1
>>> factorial(2)
2
>>> factorial(3)
6
>>> map(factorial,[4,5,6,10])
[24, 120, 720, 3628800]