我正在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))))
我不确定我是否可以在同一个循环中重复两次。我不确定这是否导致问题?
答案 0 :(得分:5)
你在第一个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)))))
现在它可以正常运行