Вы просто забыли обработать случай, когда 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