计划功能求和偶数

时间:2019-02-18 18:21:18

标签: math scheme lisp add

我需要在方案中创建一个递归函数,以对偶数的前n个数字求和。

(define (even-sum n)
  (cond ((= n 0) 0)
        ((= (modulo n 2) 0) (+ n (even-sum (- n 2))))))

这是我到目前为止的内容,但是它只运行n次,而不是对前n个偶数求和。

1 个答案:

答案 0 :(得分:4)

您只是忘记处理n为奇数的情况:

(define (even-sum n)
  (cond ((<= n 0) 0)
        ((= (modulo n 2) 0)
         (+ n (even-sum (- n 2))))
        (else (even-sum (- n 1)))))

顺便说一句:假设n >= 0,您可以使用一个简单的公式获得相同的结果。无需重复!

(define (even-sum n)
  (let ((m (if (even? n) n (- n 1))))
    (* (+ m 2) (/ m 4))))

无论哪种方式,它都能按预期工作:

(even-sum 1001)
=> 250500