Olá a todos!
Devo dizer que meu entendimento sobre a programação funcional estava indo relativamente bem... até me deparar com esse exercício.
Eu consigo fazer sentido a isso:
(defn fib [x]
(if (or (= x 1) (= x 2))
x
(if (>= x 2)
(println "Não pode ser número negativo")
(+ (fib (- x 1)) (fib (- x 2))))))
Está de acordo com a lógica, digamos, "não funcional" da programação, só que essa função:
(defn fib[x]
(loop [a 1 b 1 numero 2]
(if
(= numero x) b
(recur b (+ a b) (inc numero)))))
Me desculpem, mas não consigo ver como ela se relaciona com a primeira função.
Eu peguei essa resposta que foi escrita pelo Maurício e devo dizer que, pra mim, não faz sentido!
Talvez eu não tenha entendido o funcionamento do loop
ou como o recur
, que está recebendo 3 parâmetros, ao invés de 1 como é a função original fib
recebe, mas de forma alguma, pelo menos não seguindo a mesma lógica, da pra sair da primeira função e chegar na segunda.
Alguém, por favor, poderia me explicar o que está acontecendo?