0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【初心者向け】Ruby のまずいコード 25 本Advent Calendar 2021

Day 6

【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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?