Fibonacci序列使用循环和重复

ada*_*ham 4 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))))
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*Lam 5

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

现在它工作和快速

  • 顺便说一句,这是新的lisp编码器的常见问题.如果我写这篇文章,我会用'cond`:`(cond ax,by,:else z)`来替换`(如果是ax(如果byz))`模式.但是,当然你应该按照自己的进度学习,如果你还在学习这个功能,就不要担心形式. (3认同)