Clojure работает со значениями не ссылочными типами; другими словами, x и результат не указывают на одно и то же значение, но являются отдельными привязками. Когда вы уменьшаете результат, он не влияет на x, и поэтому вы никогда не достигнете базового значения x = 0.
Если вы измените свое состояние, чтобы проверить результат вместо x, вы получите ожидаемые результаты.
(defn fibo-looprecur [x]
(loop [current 0
next 1
result x]
(if (= result 0) current (recur next (+' current next) (dec result)))))
(map fibo-looprecur (range 10))
=> (0 1 1 2 3 5 8 13 21 34)