# weima learns to program

my attempt to do the exercises in sicp.

## Monday, June 30, 2008

### sicp exercise 1.37

;  Exercise 1.37. a. An infinite continued fraction is an expression of the form
;
;
;
;  As an example, one can show that the infinite continued fraction expansion with the Ni and the Di
;  all equal to 1 produces 1/phi , where phi is the golden ratio (described in section 1.2.2). One way
;  to approximate an infinite continued fraction is to truncate the expansion after a given number of
;  terms. Such a truncation -- a so-called k-term finite continued fraction -- has the form
;
;
;  Suppose that n and d are procedures of one argument (the term index i) that return the Ni and Di of the
;  terms of the continued fraction. Define a procedure cont-frac such that evaluating (cont-frac n d k)
;  computes the value of the k-term finite continued fraction. Check your procedure by approximating
;  1/phi using
;
;   (cont-frac (lambda (i) 1.0)
;              (lambda (i) 1.0)
;              k)
;
;  for successive values of k. How large must you make k in order to get an approximation that is accurate
;  to 4 decimal places?
;
;  b. If your cont-frac procedure generates a recursive process, write one that generates an iterative
;  process. If it generates an iterative process, write one that generates a recursive process.

(define (cont-frac-recur n d k)
(define (iter i)
(if (> i k)
0
(/ (n i) (+ (d i) (iter (+ i 1))))))
(iter 1))

(display (cont-frac-recur (lambda(i) 1.0) (lambda(i) 1.0) 100))(newline)

(define (cont-frac-iter n d k)
(define (iter i result)
(if (= i 0)
result
(iter (- i 1) (/ (n i) (+ (d i) result)))))
(iter k 0))

(display (cont-frac-iter (lambda(i) 1.0) (lambda(i) 1.0) 1000))(newline)

#### 1 comment:

Rahul said...

Rahul Here. Its better if we try to solve this problem using acculuation abstraction.