rubyで階乗計算するプログラムを書いてみた
こちらのブログ記事を読んで勉強がてらrubyのコードを書いてみました。階乗計算をするプログラムでイテレータを使うという条件で書いてみました。
def factorial (n) (n - 1).downto(1) do |i| n *= i end return n end puts factorial(gets.chomp.to_i)
ついでに再帰的関数呼び出し(?)を使って書くとこんな感じです。
def factorial(n) if n == 0 return 1 end return n * factorial(n - 1) end puts factorial(gets.chomp.to_i)
再帰的呼び出しを使うと1000の階乗を計算しようとすると"stack level too deep"となって計算できないのですが、イテレータを使っている方は100,000の階乗も計算できて驚きました。ちなみに1分弱ほど時間がかかっていました。100,000!の計算結果は456,574桁もあるんですねぇ…
そうこうしている内にこちらの記事を見つけて読んでみると、オブジェクト指向的に書くということで組み込みクラスのNumericクラスにfactorial関数を足しています。初学者の僕は「組み込みクラスに自前の関数とか足していいのかな、オロロ…」となってしまいます。そのへんのところを分かるようになりたいですね。
しかし、ネット上でいろんなrubyの階乗計算コードを見てみるといろんな書き方があって楽しいですね。僕もなるべく綺麗というか美しいコードを書けるようになりたいです。