递归版
(define (f n)
(if (< n 3)
n
(+ (f (- n 1)) (* (f (- n 2)) 2) (* 3 (f (- n 3))))))
递归的特点是直接或间接的引用自身,并且会维持一个推迟操作的链。
迭代版
(define (ff n)
(if (< n 3)
n
(f-iter 2 1 0 (- n 2))))
(define (f-iter a b c count)
(if (= count 0)
a
(f-iter (+ a (* b 2) (* c 3)) a b (- count 1))))
而迭代的特点是维持着几个变量的值,并且有一个判断迭代的退出条件,当不满足退出条件时,不断的更新这几个变量的值。
可以随时停止,并且跟着这几个变量随时继续。