Ответ 1
Используйте батут:
(declare f)
(defn h [n]
(println "(h " n ")")
#(f (+ n 1)))
(defn g [n]
(println "(g " n ")")
#(h n))
(defn f [n]
(println "(f " n ")")
#(g n))
Убейте его:
(trampoline f 0)
У меня этот код работает на моем ПК в фоновом режиме примерно 5 часов, а использование памяти плоское.