ウォンツテック

そでやまのーと

問題 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がステップ数の増加の程度となり、
その値は\Theta(\log b)となる。