Go to the first, previous, next, last section, table of contents.


プログラミング 練習問題 6 解答「行列フィボナッチ数」

これがその行列です。

[ [ 0, 1 ]   * [a, b] = [b, a + b]
  [ 1, 1 ] ]

従って `[0, 1; 1, 1]^n * [1, 1]'n+1 番目と n+2 番目の フィボナッチ数を計算します。 次はプログラムの解答例です。

C-x ( ' [0, 1; 1, 1] ^ ($-1) * [1, 1] RET v u DEL C-x )

Calc は行列(あるいは他の型)をわずか log(n,2) ステップで n 乗するアルゴリズムを知っているので、 このプログラムは非常に効率的です。 例えば、このプログラムは 1000 番目のフィボナッチ数(209 桁の整数!)を 約 10 ステップで計算します。 たとえ Z < ... Z > を使った解がもっと単純素朴な手順だとしても、 計算には多くのステップが必要になるので現実的ではありません。


Go to the first, previous, next, last section, table of contents.     利用度数