Exercise 1.16

This commit is contained in:
Correl Roush 2014-05-19 17:21:29 -04:00
parent 217e4ad3ee
commit a8e6f9f8e5

39
1-2.org
View file

@ -249,6 +249,30 @@ layout: org
* 1.2.4: Exponentiation * 1.2.4: Exponentiation
#+BEGIN_SRC scheme :tangle yes
;; ===================================================================
;; 1.2.4: Exponentiation
;; ===================================================================
(define (square x) (* x x))
(define (expt b n)
(expt-iter b n 1))
(define (expt-iter b counter product)
(if (= counter 0)
product
(expt-iter b
(- counter 1)
(* b product))))
(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 (even? n)
(= (remainder n 2) 0))
#+END_SRC
** Exercise 1.16 ** Exercise 1.16
Design a procedure that evolves an iterative Design a procedure that evolves an iterative
exponentiation process that uses successive squaring and uses a exponentiation process that uses successive squaring and uses a
@ -263,6 +287,21 @@ layout: org
to state is a powerful way to think about the design of iterative to state is a powerful way to think about the design of iterative
algorithms.) algorithms.)
----------------------------------------------------------------------
#+BEGIN_SRC scheme :tangle yes
;; -------------------------------------------------------------------
;; Exercise 1.16
;; -------------------------------------------------------------------
(define (1-16 b n)
(define (expt-iter b n a)
(cond ((= n 0) a)
((even? n) (expt-iter (square b) (/ n 2) a))
(else (expt-iter b (- n 1) (* a b)))))
(expt-iter b n 1.0))
#+END_SRC
** Exercise 1.17 ** Exercise 1.17
The exponentiation algorithms in this section are The exponentiation algorithms in this section are
based on performing exponentiation by means of repeated based on performing exponentiation by means of repeated