Кодом является Закон - Вы делаете все эти записи, редактирование и размышление в [язык по Вашему выбору], но ПОЧЕМУ? Что Вы кодируете СРЕДНИЙ? Что будет он на самом деле ДЕЛАТЬ?
(я, возможно, рекомендовал книгу по QA, но я не сделал...)
Циклическая / повторяющаяся версия - правильный путь. Clojure не может оптимизировать хвостовые вызовы из-за ограничений JVM.
Написание кода таким образом, чтобы компилятор / интерпретатор мог оптимизировать его для хвостовой рекурсии, должно привести к некоторому увеличению производительности и снижению использования стека. Я думаю, что ваша обычная функция подсчета может претендовать на хвостовую рекурсию, так что она должна быть довольно быстрой. Не уверен, так как я балуюсь Лиспом только в качестве хобби.