(define (square x) (* x x))
(define (fast-expt b n)
(cond ((= n 0) 1)
((even? n) (square (fast-expt b (/ n 2))))
(else (* b (fast-expt b (- n 1))))))
(define (fie a b n)
(cond ((= n 0) a)
((even? n) (fie a (square b) (/ n 2)))
(else (fie (* a b) b (- n 1)))))
(define (fast-expt b n)
(fie 1 b n))
(fast-expt 5 5)