Skip to content

1.11

; A function f is defined by the rule that
; 
; f(n) = n if n < 3
;      = f(n-1) + 2f(n-2) + 3f(n-3) if n >= 3
;
; Write a procedure that computes f by means of a recursive process. 
; Write a procedure that computes f by means of an iterative process.
(define (f-rec n) 
    (cond ((< n 3) n)
          (else (+ (f-rec (- n 1))
                   (* 2 (f-rec (- n 2)))
                   (* 3 (f-rec (- n 3))))))
)

(define (f-iter n)
    (define (compute a b c)
        (+ c (* 2 b) (* 3 a)))
    (define (f-iter-inner a b c count)
        (cond ((= count 2) c)
              ((< count 2) count)
              (else (f-iter-inner b c (compute a b c) (- count 1)))))
    (f-iter-inner 0 1 2 n)
)

(f-rec 5) ;Value: 25
(f-rec 4) ;Value: 11
(f-rec 3) ;Value: 4
(f-rec 2) ;Value: 2
(f-rec 1) ;Value: 1
(f-rec 0) ;Value: 0

(f-iter 5) ;Value: 25
(f-iter 4) ;Value: 11
(f-iter 3) ;Value: 4
(f-iter 2) ;Value: 2
(f-iter 1) ;Value: 1
(f-iter 0) ;Value: 0