2012-03-13 15 views
0

Fixnumクラスの階乗法を定義しようとしていますが、このFixnumを自分のメソッドの引数として渡す方法がわかりません。 は、私はそれが正しくないだろう知っていたものの、そのRubyでメソッドの引数としてオブジェクトを渡す方法

def Fixnum.factorial(n) 
    n > 1 ? n * factorial(n-1) : 1 
end 

ような何かを書くしようとしていました。それで、この番号にアクセスするための「この」予約語がありますか?このような

答えて

1

何か:

class Fixnum 
    def factorial 
     self > 1 ? self * (self - 1).factorial : 1 
    end 
end 

puts 6.factorial 
# 720 

あなたは、これは階乗を計算する愚かな方法であることはもちろん、知っていますか?

+0

愚か?どうして? ( '*'が '+'ならば、それは愚かでしょう、それは私が知る限り)。 – steenslag

+0

再帰は必要ありません。単純なループはうまくいくでしょう。 –

+2

よく、数学的には正しいが、計算上は「ばかげて」(=非常に非効率的である)。 TCOのある言語で使用されるテールコールファクタリはOKです。 Rubyでは '(2..n).inject(1、:*)'と書いています。 – tokland

関連する問題