我需要创建一个函数来计算从0开始的前n个偶数的总和(即(even-sum 4)
将返回12)。
(define (even-sum n)
(cond
((= n 0) 0)
((= n 1) 0)
(else (+ (* n 2) (even-sum (- n 2 ))))))
这是我到目前为止,它适用于(even-sum 4)
,但不适用于其他情况,(even-sum 6)
应该是30但是应该是24,(even-sum 2)
应该是2,但是4。
答案 0 :(得分:2)
您可以通过应用此公式计算算术级数的第一个 n 数的总和(请参阅Wikipedia):
(define (arithmetic-series step n)
(let ((an (+ 2 (* step (- n 1)))))
(/ (* (+ 2 an) n) 2)))
(arithmetic-series 2 20)
=> 420
但是,如果将d
替换为2,则公式更简单。
(编辑:请参阅Will Ness的comment)
答案 1 :(得分:1)
您应该只在递归步骤中减去1
。
当你乘以2时,你需要从1
减去n
。前4个偶数是0, 2, 4, 6
,所以要6
你需要(* (- 4 1) 2)
}。
(define (even-sum n)
(cond
((= n 0) 0)
((= n 1) 0)
(else (+ (* (- n 1) 2) (even-sum (- n 1))))))