网上解题集(http://sicp.readthedocs.io/en/latest/chp1/11.html)给出的迭代版本是
有两个问题:(define (f n) (f-iter 2 1 0 0 n)) (define (f-iter a b c i n) (if (= i n) c (f-iter (+ a (* 2 b) (* 3 c)) ; new a a ; new b b ; new c (+ i 1) n)))
1,i跟n两个参数可以省略一个
2,不支持负数
我给出的迭代版本是
(define (f n)
f_iter(2, 1, 0, n))
(define (f_iter a, b, c, count)
(if (< count 3)
(- (+ count a) 2)
(f_iter (+ a (* 2 b) (* 3 c))
a
b
(- count 1))))
经测试可用