問題1.18
結論から行くと、問題1.16と同じような方法で解ける。なぜ、その方法が思いつくかと言うと、わからない(天才の脳を見てみたい)。
と言うことで、凡人の私は、問題1.16と同じ方法で、状態変数nを使って、ある量が一定になるようにしたら、答えが出てきました。
アルゴリズム
- bが偶数: n <- n, a <- 2a, b <- b/2
- bが奇数: n <- n + a, a <- a, b <- b-1
nを0に初期化して、bをカウントダウンして行く。
コード
(define (fast-mul-iter a b) (define (double n) (* n 2)) (define (halve n) (/ n 2)) (define (even? n) (= (remainder n 2) 0)) (define (iter n a b) (cond ((= b 0) n) ((even? b) (iter n (double a) (halve b))) (else (iter (+ n a) a (- b 1))))) (iter 0 a b))
なんか根本的なところでしっくりきてない。