Я новичок в Clojure и думаю, что мой подход к написанию кода пока не соответствует «Пути Clojure». По крайней мере, я продолжаю писать функции, которые продолжают приводить к ошибкам StackOverflow с большими значениями. Я узнал об использовании recur, что стало хорошим шагом вперед. Но как заставить функции, подобные приведенной ниже, работать для таких значений, как 2500000?
(defn fib [i]
(if (>= 2 i)
1
(+ (fib (dec i))
(fib (- i 2)))))
Эта функция, на мой взгляд, является «простой» реализацией генератора Фибоначчи. Я видел другие реализации, которые намного более оптимизированы, но менее очевидны с точки зрения того, что они делают. Т.е. когда вы читаете определение функции, вы не говорите «о, фибоначчи».
Мы будем благодарны за любые указатели!