Fibonacci序列使用循环和重复

时间:2011-06-23 13:02:55

标签: clojure fibonacci

我正在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))))

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

1 个答案:

答案 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)))))

现在它可以正常运行