■
問題 1.17
(define (fast-* a b) (cond ((= b 0) 0) ((even? b) (double (fast-* a (halve b)))) (else (+ a (fast-* a (- b 1)))))) (define (even? x) (= (remainder x 2) 0))
(fast-* a b)の計算でbが偶数の場合はdoubleとhalveの演算により、
(+ a (* (- b 1)))と計算する場合よりステップ数が半分になる。
2^x < bを満たす最大の整数xがステップ数の増加の程度となり、
その値はとなる。