我想要一个递归执行以下操作的函数
;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)))))
你目前写的是:
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))))))