Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro função fibonacci - Clojure

Amigos,

Quando eu rodo a função Fibonacci do curso de Clojure da o seguinte erro abaixo. Eu fiz o teste com as duas funções.

forca.core=> (require '[forca.core :as forca] :reload)
nil

forca.core=> (fib2 3)
NullPointerException   clojure.lang.Numbers.ops (Numbers.java:1013)

Meu código:

(defn fib [x]
    (if (= x 0)
        0
    )

    (if (= x 1)
        1
    )

    (if (>= x 2)

        (+ 
            (fib (- x 1)) 
            (fib (- x 2))
        )

    )
)

Resposta do exercicio:

(defn fib2 [x]
    (if (= x 0) 0
    (if (= x 1)    1
    (+ (fib (- x 1)) (fib (- x 2)))
    ))
)
2 respostas

Posta a stack trace completa pra gente, assim como indicando qual dos dois código está dando essa stack trace especificamente.

solução!

Da resposta do exercicio, o bug parece mais facil: vc chamou de fib2 mas nas chamadas recursivas tá como fib. Se colocar fib2 em tudo ela funciona.

Agora no seu código original... não sou especialista clojure, mas me parece que ele devolve sempre o last statement. Entao seu codigo nao funciona pq tem 3 ifs independentes, ai o retorno vai ser null nos casos 0 e 1 (pq os ifs avaliam mas a funcao continua executando).

Precisa reescrever de tal forma a ter um unico statement, como na resposta do exercicio. Repare que o segundo if é o else do primeiro. Entao no fim tem um statement só retornando nos 3 casos.

Pelo pouco que li de clojure, ele não tem return early então nao sei direito como fazer seu codigo com 3 statements funcionar...