【发布时间】:2012-06-21 01:49:35
【问题描述】:
我正在尝试解决项目欧拉第二个问题。为什么下面的代码会导致堆栈溢出?我正在使用 recur 所以它不应该将所有递归调用存储在堆栈上。
(defn sum
[[a b]]
[b (+ a b)])
(defn fib-r
([n] (fib-r n 0 [0 1]))
([n s [a b]]
(if (= n 0)
s
(let [[c d] (sum [a b])
e (if (even? c) c 0)
f (+ s e)]
(recur (dec n) f [c d])))))
(fib-r 4000000)
【问题讨论】:
-
您正在递归 4000000 次(即计算第 400 万个斐波那契数),该问题仅要求斐波那契数低于 4000000。
标签: clojure