我正在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)))))
现在可以快速运行