お題
引数として与えられた正の整数の階乗を返すメソッドを定義してください。
n
の階乗とは,1 から n
までの整数を掛け合わせたものです。
コード
コード 1
def factorial(n)
(1..n).inject{ |product, x| product * x }
end
コード 2
def factorial(n)
(1..n).inject(&:*)
end
改善
コード 1 よりコード 2 のほうが簡潔ですが,Enumerable#inject には引数としてシンボルを与える用法があり,これを使うと
def factorial(n)
(1..n).inject(:*)
end
と書けます。
コード 2 より 1 字少ないだけですがコード 2 では Proc オブジェクトが作られるのに対し,こちらは作られません。
速度は大して変わらないようですが,n
が小さいときはこちらのほうが有意に(しかし少しだけ)速いようです。