该练习告诉您编写两个函数,一个用f"通过递归过程"计算,另一个用f"通过迭代过程计算".你做了递归的.由于此函数与fib您链接的部分示例中给出的函数非常相似,因此您应该能够通过查看fib函数的递归和迭代示例来解决这个问题:
; Recursive
(define (fib n)
(cond ((= n 0) 0)
((= n 1) 1)
(else (+ (fib (- n 1))
(fib (- n 2))))))
; Iterative
(define (fib n)
(fib-iter 1 0 n))
(define (fib-iter a b count)
(if (= count 0)
b
(fib-iter (+ a b) a (- count 1))))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你会定义f-iter这将需要的功能a,b和c论据,以及一个count说法.
这是f-iter功能.注意相似之处fib-iter:
(define (f-iter a b c count)
(if (= count 0)
c
(f-iter (+ a (* 2 b) (* 3 c)) a b (- count 1))))
Run Code Online (Sandbox Code Playgroud)
并通过一个小试验和错误,我发现a,b和c应该被初始化为2,1,和0分别,这也遵循的模式fib函数初始化a并b以1和0.所以f看起来像这样:
(define (f n)
(f-iter 2 1 0 n))
Run Code Online (Sandbox Code Playgroud)
注意:f-iter仍然是一个递归函数,但由于Scheme的工作方式,它作为一个迭代过程运行并在O(n)时间和O(1)空间上运行,不像你的代码不仅是一个递归函数而是一个递归过程.我相信这是练习1.1的作者所寻求的.