SICP 問題1.18

2017/08/24

1.2.4 べき乗 - 計算機プログラムの構造と解釈 第二版

問題1.16, 1.17の結果を使い, 加算, 二倍, 二分による, 対数的ステップ数の, 二つの整数の乗算の反復的プロセスを生成する手続きを工夫せよ.

あれ、こっちで対数的ステップ数の反復的プロセスを書くのか。
前回の問題の時にこれ書いちゃった。前回で1.17と1.18両方答えてたみたい。

再掲。

(define (fast-multi a n)
  (fast-multi-iter a n 0))

(define (fast-multi-iter a n x)
  (cond ((= n 0) x)
        ((even? n) (fast-multi-iter (double a) (halve n) x))
        (else (fast-multi-iter a (- n 1) (+ x a)))))

解答例みたけど合ってた。よかった!