我正在Clojure中进行Project Euler挑战,我想找到斐波那契数列中所有偶数之和,直到一个特定的数。

下面是执行此功能的代码。我知道有更简便的方法可以做到这一点,我只是在尝试使用循环和递归进行递归。但是,该代码似乎无法正常工作,因此永远不会返回答案。

(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))))


我不确定是否可以在同一循环中重复两次。我不确定这是否是导致问题的原因?

最佳答案

您在第一个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)))))


现在可以快速运行

08-06 05:57