私はこのようなコードを書くとしますKotlin:相互再帰関数のための末尾再帰
tailrec fun odd(n: Int): Boolean =
if (n == 0) false
else even(n - 1)
tailrec fun even(n: Int): Boolean =
if (n == 0) true
else odd(n - 1)
fun main(args:Array<String>) {
// :(java.lang.StackOverflowError
System.out.println(even(99999))
}
私はにStackOverflowErrorをスローせずにmain
を実行できるように、私は、Kotlinは、これらの相互再帰関数を最適化するために得る方法を教えてください。 tailrec
キーワードは、単一機能の再帰で機能しますが、それ以上の複雑さはありません。また、tailrec
キーワードが使用されている場合、テールコールが見つからないという警告も表示されます。おそらくこれはコンパイラにとっては難しいでしょうか?ウィキペディアhttps://en.wikipedia.org/wiki/Tail_callことで
あなたはそれがKotlinに追加したい場合は、「相互末尾再帰」の機能のためhttps://youtrack.jetbrains.comに機能要求を追加することができ、それが最善の策です。既に要求されているか計画されている場合は、最初に検索します。 –
私はここでKotlinの問題を作成しました:https://youtrack.jetbrains.com/issue/KT-11307 – denine99