1.17

(load "common.scm")

; 状态变化
; b 是偶数时, ab = (2a)(b/2), a -> 2a, b -> b/2
; b 是奇数时, ab = a(b-1) + a, a -> a, b -> (b-1)
(define (multiplied a b)
  (define (multiplied-iter a b)
    (cond ((= b 0) 0)
          ((even? b) (multiplied (double a) (halve b)))
          (else (+ a (multiplied a (- b 1))))
          )
    )
  (multiplied-iter a b)
  )
;           |
;           |
;           |
;          \|/

(define (multiplied a b)
  (cond ((= b 0) 0)
        ((even? b) (multiplied (double a) (halve b)))
        (else (+ a (multiplied a (- b 1))))
        )
  )

(display (multiplied 1 3))
(newline)
(display (multiplied 2 100000))