LoginSignup
0
0

More than 1 year has passed since last update.

【Ruby のまずいコード】階乗

Last updated at Posted at 2021-12-05

お題

引数として与えられた正の整数の階乗を返すメソッドを定義してください。
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 が小さいときはこちらのほうが有意に(しかし少しだけ)速いようです。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0