初心のときにありがちな書き方は
def fact(n)
if n == 0 then
1
else
n * fact(n - 1)
end
end
n が負のときどうするの、っていうのはとりあえず置いといて、まぁ再帰を知ってるのはいいことだけど、Ruby ならではのうまい書き方がある。
class Integer
def !
(1..self).inject(1, :*)
end
end
puts 3.!
puts 0.!
既存のクラスに対してこういう書き方で自前のメソッドを追加できるのも Ruby の強み。