sicp/1_11.sch

24 lines
426 B
Scheme

; f(n) = n, n < 3, f(n) = f(n-1) + 2f(n-2) + 3f(n-3) n >= 3
(define (f1 n)
(if (< n 3)
n
(+ (f1 (- n 1))
(* 2 (f1 (- n 2)))
(* 3 (f1 (- n 3))))))
(define (f2 n)
(if (< n 3)
n
(f-iter 2 1 0 n)))
; a = f(2), b = f(1), c = f(0)
; a <- a + 2b + 3c, b <- a, c <- b
(define (f-iter a b c count)
(if (< count 3)
a
(f-iter (+ a (* 2 b) (* 3 c))
a
b
(- count 1))))