我正在学习使用Scheme的《计算机程序的结构和解释》一书,而我仅涉及了递归的一部分。我编写了一个练习1.11的程序:
函数f由以下规则定义:如果n 3,则f(n)= f(n-1)+ 2f(n-2)+ 3f(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)
最佳答案
该错误是由于在(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