练习1.11
递归版本:
(define (recur-f n)
(if (< n 3) n
(+ (recur-f (- n 1))
(* 2 (recur-f (- n 2)))
(* 3 (recur-f (- n 3))))))
这个很好写 只要按照定义翻译一遍就行 当然效率也很低
迭代版本:
(define (iter-f n)
(define (iter x y z count)
(if (= count 0)
z
(iter (+ x (* 2 y) (* 3 z))
x
y
(- count 1))))
(iter 2 1 0 n))
这个就稍微有点难度了
用了以下代换:
这是一个线性迭代过程 时间复杂度为O(n) 比递归版本的好很多
更多有关自底向上计算的知识请参阅Dynamic Programming