02 July 2014
Rubyのメソッド引数は奥が深い(その2)または別のフィボナッチ
─ 問題 ─
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
関連記事:
blog comments powered by Disqus