1.37 Exercise 1.37

A procedure for evaluating a continued fraction for up to depth k:

(define (cont-frac n d k)
  (define (loop i)
    (if (= i k) (/ (n i) (d i))
        (/ (n i)
           (+ (d i) (loop (+ i 1))))))
  (loop 1))

Using an auxiliary procedure test-37, we can see 1/phi being approximated:

(define (test-37 k)
  (/ 1 (cont-frac (lambda (i) 1.0)
                  (lambda (i) 1.0)
                  k)))
> (test-37 10)

1.6181818181818184

> (test-37 100)

1.618033988749895

Writing an iterative cont-frac procedure is difficult until you realize that it is much easier to create the fraction from the inside out, starting from k and moving to 1. Then the answer is straightforward:

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