首页 > 解决方案 > 对偶数求和的方案函数

问题描述

我需要在方案中创建一个递归函数来总结前 n 个偶数。

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

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

标签: mathschemelispadd

解决方案


你只是忘了处理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

推荐阅读