Ich habe versucht, einige meiner Code zu reinen Funktionen zu transformieren, um zu lernen, wie Kotlin in einer funktionalen Weise zu verwenden, mit diesem einfachen Code-Schnipsel kann ich mir keinen Weg vorstellen, meine calculateFibonacci
Funktion eine reine Funktion zu machen.Wie erreicht man eine reine Funktion mit dynamischer Programmierung in Kotlin?
Ich bin mir einer potenziell rekursiven Lösung bewusst, aber was ist mit einem potenziellen Stack-Überlauf, implementiert Kotlin Tail Call Optimization?
Beispiel:
val fibonacciValues = hashMapOf<Int, BigInteger>(0 to BigInteger.ONE, 1 to BigInteger.ONE);
// * TODO investigate how to do dynamic programming with a pure function ** //
private fun calculateFibonacci(n: Int): BigInteger? {
if (fibonacciValues.contains(n)) {
return fibonacciValues.get(n)
} else {
val f = calculateFibonacci(n - 2)!!.add(calculateFibonacci(n - 1))
fibonacciValues.put(n, f)
return f
}
}
Für den gesamten Schnipsel ich diesen Kern hochgeladen: https://gist.github.com/moxi/e30f8e693bf044e8b6b80f8c05d4ac12
Vielen Dank für den Verweis auf die Hauptdokumentation – moxi