# SICP Exercise 1.18

Initially I solved it the same way as fast-exp. Just remember that an iterative process can be completely defined, at any point, by its state variables.

```
(define (mul-iter a b)
(define (iter counter a b)
(cond ((= b 0) counter)
((even? b) (iter counter (double a) (halve b)))
(else (iter (+ counter a) a (- b 1)))))
(iter 0 a b))
(define (double x) (+ x x))
(define (halve x) (/ x 2))
```