Sono nuovo di Clojure e penso che il mio approccio alla scrittura del codice non sia in linea con la "Via del Clojure". Almeno, continuo a scrivere funzioni che continuano a portare a errori StackOverflow con valori elevati. Ho imparato a utilizzare Recur che è stato un buon passo avanti. Ma come far funzionare funzioni come quella sottostante per valori come 2500000?Come si scrive questa funzione Clojure in modo che non esploda lo stack?
(defn fib [i]
(if (>= 2 i)
1
(+ (fib (dec i))
(fib (- i 2)))))
La funzione è, ai miei occhi, l'implementazione "normale" di un generatore di Fibonacci. Ho visto altre implementazioni che sono molto più ottimizzate, ma meno ovvie in termini di ciò che fanno. Cioè quando leggi la definizione della funzione, non vai "oh, fibonacci".
Qualsiasi suggerimento sarebbe molto apprezzato!
Grazie! Ci rifletterò su questo. :) – bitops
Ehi, volevo solo tornare e chiedere aiuto: se passo i valori superiori a 92 alla tua funzione, ricevo un errore. ArithmeticException overflow integer clojure.lang.Numbers.throwIntOverflow (Numbers.java:1374) Mi manca qualcosa? – bitops
E per essere chiari, mi piace ancora la tua risposta. :) – bitops