sicp-solutions/chapter-1/ex-1.11.scm

24 lines
No EOL
513 B
Scheme

#lang sicp
; recursive process
(define (f1 n)
(if (< n 3)
n
(+ (f1 (- n 1))
(* 2 (f1 (- n 2)))
(* 3 (f1 (- n 3))))))
; iterative process
; loop for n >= 3
(define (f-iter iter-count acc1 acc2 acc3)
(let ((new-val (+ acc1 (* 2 acc2) (* 3 acc3))))
(if (= iter-count 0)
new-val
(f-iter (- iter-count 1) new-val acc1 acc2))))
(define (f2 n)
(if (< n 3)
n
(f-iter (- n 3) (f2 2) (f2 1) (f2 0))))
; these are just 2,1,0 respectively, but I felt this looks cleaner