Clojure - Fibonacci使用循环重复 - 来到无限循环

时间:2018-05-15 09:01:13

标签: loops clojure infinite

我试图使用循环重复结构来获得斐波那契数字:

ThisTest

当我运行它时,它可以正常运行0,但是当我将1放入fibo-looprecur时,它会进入无限循环。什么可能导致这种行为?

1 个答案:

答案 0 :(得分:5)

Clojure使用的值不是引用类型;换句话说,x和result不指向相同的值,而是单独的绑定。当你减少结果时它对x没有影响,因此你永远不会达到x = 0的基本情况。

如果您将条件更改为检查结果而不是x,那么您将获得预期结果。

(defn fibo-looprecur [x]
  (loop [current 0
         next 1
         result x]
    (if (= result 0) current (recur next (+' current next) (dec result)))))

(map fibo-looprecur (range 10))
=> (0 1 1 2 3 5 8 13 21 34)