#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