In approaching the problem I think of the expression like this:
This lends itself naturally to a recursive definition. "The Rest" is just the next procedure call. The terminating case is when you have called the procedure k times.
I had to define a helper procedure so that I could keep track of the index. The only way I see to avoid this is to define the procedure to take four arguments, like
(define cont-frac d n a b), which starts at a and ends at b. Since the exercise specifically asks for a procedure with three arguments, I chose to create a helper function.(define (cont-frac d n k)
(define (cont-frac-helper index)
(if (= index k)
(/ (n index) (d index))
(/ (n index) (+ (d index) (cont-frac-helper (+ index 1))))))
(cont-frac-helper 1))
;; Estimate of golden ratio
(/ 1 (cont-frac (lambda (x) 1.0) (lambda (x) 1.0) 10))
The iterative version is a little harder, but by now I'm getting the hang of this. I know I need a
results variable to store the results of my work from one iteration to the next. The steps are- Start with the final term Nk/Dk
- Check whether you're done.
- If you're not done, the new result is Nk-1 / (Dk-1 + Resultk)
- You're done after you've calculated the step with N1 and D1. Repeat until k=0
;; Iterative version
(define (cont-frac d n k)
(define (iter k result)
(if (= k 0)
result
(iter (- k 1) (/ (n k) (+ (d k) result)))))
(iter k (/ (n k) (d k))))
;; Estimate of golden ratio
(/ 1 (cont-frac (lambda (x) 1.0) (lambda (x) 1.0) 10))
Update: Fixed an off-by-one error in the iterative version.

