我正在阅读使用Scheme的《计算机编程的结构和解释》一书,而我仅涉及了递归的一部分。我编写了一个练习1.11的程序:
函数f由以下规则定义:如果n <3,则f(n)= n;如果n> 3,则f(n)= f(n-1)+ 2f(n-2)+ 3f(n-3)。编写一个通过递归过程计算f的过程。编写一个通过迭代过程计算f的过程。
我在repl.it编写了代码,当我使用输入运行procdure时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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句