summaryrefslogtreecommitdiff
path: root/coding-exercises/1/chapter116.rkt
blob: e4f1e7df26d3c6df9cea03cc83691a43e130a416 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(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)