faster fibonacci2010/09/10

最も簡単に fib を高速化する方法 - ドレッシングのような
二つ値を返せば良いんですよ。メモ化なんてしなくていい。

末尾再帰的(ってことで良いのかな?)アイディアは素晴しいと思うけど、

fib = Hash.new{|h, k| h[k] = k < 3 ? 1 : h[k-1] + h[k-2]}
p fib[1000]

が"最も簡単"かどうかはさておき、"最も簡潔"な解法でないかと思います。

Ruby会議2010のto_rubyのセッションで教わった手法です。

Hash.newに与えたブロックの評価されるタイミングがポイントで、 理論的にはキャッシュ版と同じ動作になります。

速度的にも問題ありませんし、Golf的にも結構イケてます。

(あなごるでは、どうも解答埋め込みには勝てないっぽけど……)