nehme ich schreiben Code wie folgt:Kotlin: Endrekursion für beide Seiten rekursiven Funktionen
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))
}
Wie erhalte ich Kotlin diese für beide Seiten rekursiven Funktionen zu optimieren, so dass ich main
ohne werfen einen Stackoverflow laufen kann? Das Schlüsselwort tailrec
funktioniert für die Rekursion mit einer einzigen Funktion, aber nicht komplizierter. Ich sehe auch eine Warnung, dass keine Tail-Calls gefunden werden, wo das Schlüsselwort tailrec
verwendet wird. Vielleicht ist das für Compiler zu schwer?
Sie können eine Feature-Anfrage an https://youtrack.jetbrains.com für das Merkmal der „gegenseitigen Endrekursion“ hinzufügen, das ist die beste Wahl, wenn Sie wollen es Kotlin hinzugefügt. Suchen Sie auch dort zuerst, falls es bereits angefordert oder geplant ist. –
ich eine Kotlin Ausgabe erstellt hier: https://youtrack.jetbrains.com/issue/KT-11307 – denine99