使用Scheme的递归函数以及如何使用两个计数器

时间:2017-10-10 23:05:37

标签: recursion scheme racket

我希望有一个以递归方式执行以下操作的函数

;f(n) = n, if n<4
;f(n) = f(n-1) + 2f(n-2) + 3f(n-3) + 4f(n-4)

这是我提出的,但它没有涵盖每次递归调用的乘法。我想知道如何使用Scheme

实现它
(define (function n)
  (= counter 0)
  (if (< n 4)
      n
      (+ n (function (- n 1)))))

1 个答案:

答案 0 :(得分:0)

您目前所写的内容是:

f(n) = n, if n<4
f(n) = n + f(n-1) 

有一个不合适的,完全没用的(= counter 0)语句只能返回#t#f(如果在范围内没有定义计数器,这将产生运行时错误)。

以下代码将执行您尝试实现的目标。如果要将递归的数学定义转换为代码,则需要在代码中使用与数学定义中相同的递归函数调用(在本例中为4)。

(define (function n)
  (if (< n 4)
      n
      (+ (* 1 (function (- n 1))) (* 2 (function (- n 2))) (* 3 (function (- n 3))) (* 4 (function (- n 4))))))