我正在学习使用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

    07-24 14:54