我试图使用循环重复结构来获得斐波那契数字:
ThisTest
当我运行它时,它可以正常运行0,但是当我将1放入fibo-looprecur时,它会进入无限循环。什么可能导致这种行为?
答案 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)