私のコードのいくつかを純粋な関数に変換しようとしてきましたが、私のcalculateFibonacci
関数を純粋な関数にする方法を考えることができないこの単純なコードで、Kotlinを機能的に使う方法を学びました。Kotlinで動的プログラミングを使用して純粋な関数を達成するにはどうすればよいですか?
私は潜在的に再帰的な解決策を知っていますが、潜在的なスタックオーバーフローについてはどうでしょうか?KotlinはTail Call Optimizationを実装していますか?私はこの主旨をアップロード全体スニペットについては
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
}
}
:
例 https://gist.github.com/moxi/e30f8e693bf044e8b6b80f8c05d4ac12
メインドキュメント – moxi