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使えばめっちゃ簡単に階乗が書けるらしい。ヒエェ