我需要这样编写函数:如果它的参数小于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等于10的10。我不知道导致这种行为的cond和if之间有什么区别。
发布于 2013-11-23 16:44:36
你想要的是(else (fiHelper 0 1 2 n))而不是(else fiHelper 0 1 2 n)。第一个表达式调用助手函数;第二个表达式只计算符号fiHelper, 0, 1, 2,得到最后一个的值。
发布于 2013-11-23 19:45:42
您代码中的错误是因为我不太容易找到。我在foo fiHelper中插入了一个“(显示"HelferFoo"),然后注意到这个foo从未被调用过。
乔治·福斯
https://stackoverflow.com/questions/20164912
复制相似问题