SICP练习题1.11

网上解题集(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))))

经测试可用

你可能感兴趣的:(SIC)