そぬばこ

備忘録とか、多分そんな感じ。

Rubyで階乗

再帰をつかってやれとの課題がとある神から降りてきたのでメモ。

def fact(n)
  return 1 if n == 0
  n * fact(n-1)
end

提出はこれでしたんだけど、こんな感じで大丈夫なのかなーという感じで「Ruby 階乗」なんかでググったりしてみたら下のやつみたいな感じのがあって

def fact(n, a=1)
  return a if n == 0
  fact(n-1, n*a)
end

末尾再帰を用いてるらしく最初見た時は末尾再帰ってなんじゃってことで頭が???。けど、やってることはわかった。
どうしてこんな書き方をするのかなってところで末尾再帰という文字の理解をすることに。
再帰は再帰なんかじゃない!末尾再帰こそが真の再帰なんだ!
上のページがすごくわかりやすくて勉強になった。

def fact(n)
  (1..n).to_a.inject(1) {|f, i| f*i}
end

これはおまけだけどRubyではinject使えばめっちゃ簡単に階乗が書けるらしい。ヒエェ