我正在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))))
Run Code Online (Sandbox Code Playgroud)
我不确定我是否可以在同一个循环中重复两次.我不确定这是否会导致问题?
在第一个IF(后sum
)中你有一个错位的关闭paren ...
(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)))))
Run Code Online (Sandbox Code Playgroud)
现在它工作和快速