Soy un recién llegado a clojure que quería ver de qué se trata todo este alboroto. Pensar que la mejor forma de familiarizarme con esto es escribir un código simple, pensé que comenzaría con una función de Fibonacci.una función de Fibonacci recursiva en Clojure
Mi primer esfuerzo fue:
(defn fib [x, n]
(if (< (count x) n)
(fib (conj x (+ (last x) (nth x (- (count x) 2)))) n)
x))
Para utilizar esto necesito para sembrar x con [0 1] cuando se llama a la función. Mi pregunta es, sin envolverlo en una función separada, ¿es posible escribir una función única que solo tome el número de elementos para devolver?
Haciendo un poco de lectura en torno me llevó a algunos mejores maneras de lograr la misma funcionalidad:
(defn fib2 [n]
(loop [ x [0 1]]
(if (< (count x) n)
(recur (conj x (+ (last x) (nth x (- (count x) 2)))))
x)))
y
(defn fib3 [n]
(take n
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1]))))
De todos modos, más por el bien del ejercicio que cualquier otra cosa, puede alguien ayudarme con una mejor versión de una función de Fibonacci puramente recursiva? ¿O tal vez compartir una función mejor/diferente?
fib3 es el más Clojure'ish de estos –