SICP - Solution: Exercise 1.11

SICP - Solution: Exercise 1.11

October 2, 2018

Exercise 1.11 #

A function $f$ is defined by the rule that ${f(n)=n}$ if ${n<3}$ and ${f(n)}={f(n-1)}+{2f(n-2)}+{3f(n-3)}$ if ${n\geq3}$.

Write a procedure that computes f by means of a recursive process. Write a procedure that computes f by means of an iterative process.

Solution #

Recursive version:

(define (f-recursive n)
  (if (< n 3)
      n
      (+ (f-recursive (- n 1))
         (* 2 (f-recursive (- n 2)))
         (* 3 (f-recursive (- n 3))))))

Iterative version:

(define (f-iterative n)
  (define (f-loop n-1 n-2 n-3 nth)
    (if (= n nth)
        n-1  ; Final result of the computation
        (f-loop (+ n-1 (* 2 n-2) (* 3 n-3))  ; Compute f(n)
                n-1
                n-2 
                (+ 1 nth))))
  (if (< n 3)
      n
      (f-loop 2 1 0 2)))