hack のためのネタ帳, etc,,,

状況

練習問題の定番だし、自前で書いても1行なので、大した話ではないのだが、
Ruby で階乗 $n! = 1 \times 2 \times \cdots \times n$ の書き方について、
ほぼ同じなんだけど微妙に違う書き方がいろんなソースに分散するのも嫌だなと思い、
推奨の書き方もしくは標準ライブラリの機能に何かないものかと、
ruby 標準ライブラリ 階乗」でググったら以下のスレッドを見つけた。
標準ライブラリにはないよ。との事。
10 年位前のスレッドだが、 に出てこないので、現在も標準ライブラリでは提供されてないようだ。

上記のスレッドにいくつか解決策が提案してある。
代表的なのは
  • (1..n).inject(:*)
  • class Integer;def !;(1..self).inject(:*);end;end; で整数型を拡張しといて !n または n.!
  • Math.gamma でガンマ関数 $\Gamma(n+1)=n!'$ が使えるので、n! は Math.gamma n+1 と同義
辺りだろうか?
ネイティブ実装されてるので、Math.gamma が一番速いようだし、階乗そのものではないが、実質的に、階乗なので、どうやら Math.gamma が正解っぽい。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます