Scheme Lisp程序,用于n个偶数之和

时间:2018-02-01 18:42:45

标签: numbers scheme lisp racket r5rs

我需要创建一个函数来计算从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。

2 个答案:

答案 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))))))