我需要编写以这种方式工作的函数:如果其参数小于3,则必须返回参数,否则返回f(n-1) + f(n-2) + f(n-3)
。该函数必须生成迭代(非递归)过程
现在,我有这个函数的变体:
(define (fi n)
(define (fiHelper x1 x2 x3 c)
(cond ((= c 2) x3)
(else (fiHelper x2 x3 (+ x1 x2 x3) (- c 1)))))
(cond ((< n 3) n)
(else fiHelper 0 1 2 n)))
无论我传递的是什么,它总是返回我传入的n,例如,如果我通过10
它会返回10
,它会返回17
如果我通过17
等等。我用if
语句重写了它,如下所示:
(define (fi n)
(define (fiHelper x1 x2 x3 c)
(cond ((= c 2) x3)
(else (fiHelper x2 x3 (+ x1 x2 x3) (- c 1)))))
(if (< n 3)
n
(fiHelper 0 1 2 n)))
它按预期工作 - 为n等于230
返回10
。我无法弄清楚导致此行为的cond
和if
之间的区别。
答案 0 :(得分:2)
您需要(else (fiHelper 0 1 2 n))
,而不是(else fiHelper 0 1 2 n)
。第一个表达式调用辅助函数;第二个只是评估符号fiHelper, 0, 1, 2
,取最后一个符号的值。
答案 1 :(得分:0)
代码中的错误是因为我不容易找到。我在foo fiHelper中插入了一个“(显示”HelferFoo“),然后注意到这个foo从未被调用过。
Georg Fuss