フィボナッチ数列の話

This entry was posted by on Wednesday, 31 May, 2006
> >http://d.hatena.ne.jp/omochist/20060531 >、 >http://d.hatena.ne.jp/lethevert/20060531/p5 >。たしか「やさしいHaskell入門」にあったと思いますが、 Haskeller も悩まずにこうですね。 > >fib = 0 : 1 : zipWith (+) fib (tail fib) > >Clean だと let が必要だったりする理由があるんでしょうか? > >少し真面目に書くと、このように書くことで、ある種のプログラムは高速化が期待できます。たとえば、リンク先のように「1〜20までのフィボナッチ数列を順番に印字する」という場合、18と19が計算されていればそれをもとに20が計算できるわけです。で、↑はリストになっているので、順番に印字していったら、たんに繰返しで fib 20 を計算するまでの計算量でぜんぶ印字できてしまうという。だから速いはずです。試してないけど、再帰しちゃう例よりはもちろんずっと速いでしょう。繰り返しよりも理論的には速いはずだけど、昨今はコンピュータじたいが速いのでこれくらいならほとんど差は出ないんじゃないかな。同じアルゴリズムでほかの言語で書くのと比べてどうかは知りません。 >

Comments are closed.