我要通过这本书的结构和解释计算机程序设计,它使用方案,我只是通过递归的部分了。我写了一个程序锻炼1.11:
函数f由规则定义的F(N)= N如果n <3和F(N)= F(N - 1)+ 2F(N - 2)+ 3F(N - 3)如果n> 3。写,通过递归过程来计算为f的过程。编写通过迭代过程的装置计算为f的过程。
我写的代码在repl.it,当我运行与输入2
的procdure,它给我的错误: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