Последовательность Фибоначчи с использованием цикла и повторения - PullRequest
4 голосов
/ 23 июня 2011

Я выполняю задачу Project Euler в Clojure и хочу найти сумму всех четных чисел в последовательности Фибоначчи до определенного числа.

Код функции, которая делает это, приведен ниже,Я знаю, что есть более быстрые и простые способы сделать это, я просто экспериментирую с рекурсией, используя loop и recur.Однако код, похоже, не работает, он никогда не возвращает ответ.

(defn fib-even-sum [upto]
  (loop [previous 1 nxt 1 sum 0]
    (if (or (<= upto 1) (>= nxt upto))
     sum)
    (if (= (mod nxt 2) 0)
       (recur nxt (+ previous nxt) (+ sum nxt))
       (recur nxt (+ previous nxt) sum))))

Я не был уверен, смогу ли я повторить дважды в одном цикле или нет.Я не уверен, если это вызывает проблему?

1 Ответ

5 голосов
/ 23 июня 2011

У вас есть неуместное закрытие парен в первом IF (после sum) ...

(defn fib-even-sum [upto]
  (loop [previous 1 nxt 1 sum 0]
    (if (or (<= upto 1) (>= nxt upto))
        sum
        (if (= (mod nxt 2) 0)
           (recur nxt (+ previous nxt) (+ sum nxt))
           (recur nxt (+ previous nxt) sum)))))

Теперь работает и быстро

...