プロジェクトオイラーの2番目の質問を解決しようとしています。以下のコードでスタック オーバーフローが発生するのはなぜですか? 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)