問題5.29 – SICP(計算機プログラムの構造と解釈)その279
2009年11月18日
問題5.29
;;; EC-Eval input: (define (fib n) (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2))))) (total-pushes = 3 maximum-depth = 3) ;;; EC-Eval value: ok ;;; EC-Eval input: (fib 3) (total-pushes = 128 maximum-depth = 18) ;;; EC-Eval value: 2 ...
実行結果の表
n | Fib(n) | total-pushes | maximum-depth |
---|---|---|---|
0 | 0 | 16 | 8 |
1 | 1 | 16 | 8 |
2 | 1 | 72 | 13 |
3 | 2 | 128 | 18 |
4 | 3 | 240 | 23 |
5 | 5 | 408 | 28 |
6 | 8 | 688 | 33 |
7 | 13 | 1136 | 38 |
8 | 21 | 1864 | 43 |
a. Fib(n)
を計算するのに必要なスタックの最大深さの n
を使った式
上記表の結果から、D = (5 * n) + 3
となる。
b. プッシュの総数の式と式 S(n) = a * Fib(n + 1) + b
の a
と b
の値
プッシュの数:S(n)
は S(n-1) + S(n-2) + k
で表せると考える。
よって、上記表の結果より、k
は 40
であるとわかる。
また、上記表の結果から、 S(n) = a * Fib(n + 1) + b
は a = 56
、b = -40
となることがわかる。
$(n) = 56 * Fib(n + 1) - 40
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542