2008年8月3日日曜日

パターンマッチ

10の階乗を求め方を教えてください.

あっ,はい‥‥‥.

10!=10*9*8*7*6*5*4*3*2*1

という感じでもとめるのですが,さぁエレガントに考えていきましょう.


10!=10*9!

=10*9*8!

=10*9*8*7!

=10*9*8*7*6!

=10*9*8*7*6*5!

=10*9*8*7*6*5*4!

=10*9*8*7*6*5*4*3!

=10*9*8*7*6*5*4*3*2!

=10*9*8*7*6*5*4*3*2*1!

=10*9*8*7*6*5*4*3*2*1*0!

=10*9*8*7*6*5*4*3*2*1*1

=3628800

ここから分かるように0!のときは1で,それ以外は例えば10!ならば10*9!を求めればいいということが分かります.

100!とか求めるにはこれだと大変.コンピュータに任せましょう.

fact 0 = 1
fact n = n*fact(n-1)

main = print $ fact 100



3行でかけるなんて美しい.これが分かってもらえるのがうれしい今日このごろです.

0 件のコメント: