SICP 問題1.17
(define (* a b) (if (= b 0) 0 (+ a (* a (- b 1))))) ;; 末尾再帰にしてみた (define (* a b) (*iter a b 0)) (define (*iter a b sum) (if (= b 0) sum (*iter a (- b 1) (+ a sum)))) (define (double n) (* 2 n)) (define (halve n) (/ n 2)) ;; fast-exptのように (define (fast-* n m) (cond ((= m 0) 0) ((even? m) (double (fast-* n (halve m)))) (else (+ n (fast-* n (- m 1))))))