我正在阅读《方案的计算机编程的结构和解释》 ,该书使用Scheme,而我仅涉及了递归的一部分。我编写了一个练习1.11的程序:
函数f由以下规则定义:如果n <3并且f(n)= f(n-1)+ 2f(n-2)+ 3f(n-3),则f(n)= n ),如果n> 3.编写一个通过递归过程计算f的过程。编写一个通过迭代过程计算f的过程。
我在repl.it处编写了代码,当我使用输入2
运行程序时,出现了错误:Error: 2 is not a function [fRecurse, (anon)]
。有人可以向我解释这是什么意思,我该如何解决?为什么期望我的输入是函数?
代码:
(define (fRecurse n)(
(cond ((< n 3) n)
((>= n 3)
(+ (procRecurse (- n 1))
(* 2 (f (- fRecurse 2)))
(* 3 (f (- fRecurse 3))))))))
(fRecurse 2)
答案 0 :(得分:2)
该错误是由于(cond...)
前有一对多余的括号引起的。要解决此问题,我们只需删除多余的一对括号即可:
(define (fRecurse n)
(cond ((< n 3) n)
((>= n 3)
(+ (fRecurse (- n 1))
(* 2 (fRecurse (- n 2)))
(* 3 (fRecurse (- n 3)))))))
(fRecurse 2)
我对您的示例进行了一些其他修复,以使其正常运行:
f
更改为fRecurse
procRecurse
更改为fRecurse
(* 2 (f (- fRecurse 2)))
更改为(* 2 (fRecurse (- n 2)))
(* 3 (f (- fRecurse 3)))
更改为(* 3 (fRecurse (- n 3)))
查看更新后的repl.it