Clojure - 使用循环递归的斐波那契 - 无限循环
Clojure - Fibonacci using loop recur - comes to infinite loop
我正在尝试使用循环递归构造来获取斐波那契数列:
(defn fibo-looprecur [x]
(loop [current 0
next 1
result x]
(if (= x 0) current (recur next (+' current next) (dec result))))
)
当我 运行 它时,它可以使用 0,但是当我将 1 放入 fibo-looprecur 时,它会进入无限循环。是什么导致了这种行为?
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)
我正在尝试使用循环递归构造来获取斐波那契数列:
(defn fibo-looprecur [x]
(loop [current 0
next 1
result x]
(if (= x 0) current (recur next (+' current next) (dec result))))
)
当我 运行 它时,它可以使用 0,但是当我将 1 放入 fibo-looprecur 时,它会进入无限循环。是什么导致了这种行为?
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)