SICP問題1.17
整数の乗算を足し算であらわすと
(define (mul a b) (if (= b 0) 0 (mul a (mul a (- b 1)))))
となる。これは線形ステップ(ようするにO(n)に比例する)。
これを
2倍するdoubleと1/2にするhalveを使って、
逐次平方であらわしてO(log(n))に比例するようにすると、
(define (mul a b) (cond ((= b 0) 0) ((= b 1) a) ((even? b) (mul (double a) (halve b))) (else (mul (+ a a) (- b 1)))))
となる。