Skip to content

expt

; Exponent Recursive
; requires Θ(n) steps and Θ(n) space
(define (expt b n)
    (cond ((= n 0) 1)
    (else (* b (expt b (- n 1)))))
)
(expt 2 6) ;Value: 64

; Exponent iterative
; requires Θ(n) steps and Θ(1) space
(define (expt b n)
    (define (expt-iter b prod n)
        (cond ((= n 0) prod)
            (else (expt-iter b (* b prod) (- n 1)))
        )
    )
    (expt-iter b 1 n)
)
(expt 2 6) ;Value: 64
(expt 2 0) ;Value: 1

; Exponent fast
; b^n = (b^n/2)^2    if n is even
; b^n = b * b^(n-1)  if n is odd
;
; This has  Θ(log n) growth,
; for example for n = 1000, it requires only 14 multiplications
(define (fast-exp b n)
    (define (even? n) (= (remainder n 2) 0))
    (cond ((= n 0) 1)
          ((even? n) (square (fast-exp b (/ n 2))))
          (else (* b (fast-exp b (- n 1))))
    )
)
(fast-exp 2 6) ;Value: 64
(fast-exp 2 5) ;Value: 32