Функция схемы для суммирования четных чисел - PullRequest
0 голосов
/ 18 февраля 2019

Мне нужно создать в схеме рекурсивную функцию для суммирования первых n чисел четных чисел.

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

Это то, что у меня есть, но она выполняется только n раз вместо суммированияпервое n число четных чисел.

1 Ответ

0 голосов
/ 18 февраля 2019

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