─ 問題 ─

n番目のフィボナッチ数を返すメソッドfibを定義しなさい。但し、メソッドの実装は一文字とする。

解答例は下。

















─ 解答例 ─

def fib(n, m=n==0||n==1 ? n : fib(n-1)+fib(n-2))
  m
end

(1..20).map { |n| fib n } # => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]

詐欺です、スンマセンm(__)m


(追記:2014-7-3) メモ化高速バージョンを追加しました。

メモ化高速バージョン

def fib(n, m={0=>0,1=>1}.tap{|s|s.default_proc=->h,k{h[k]=h[k-1]+h[k-2]}}[n])
  m
end

fib(1000) # => 43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875

関連記事:

Rubyのメソッド引数は奥が深い

RubyのHashの秘密 その2



blog comments powered by Disqus
ruby_pack8

100円〜で好評発売中!
M'ELBORNE BOOKS