Supponiamo che scrivo codice come questo:Kotlin: ricorsione di coda per le funzioni ricorsive reciprocamente
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))
}
Come raggiungo Kotlin per ottimizzare queste funzioni ricorsive reciprocamente, in modo che possa funzionare main
senza lanciare uno StackOverflowError? La parola chiave tailrec
funziona per la ricorsione a funzione singola, ma nulla di più complicato. Vedo anche un avviso che non vengono trovate chiamate di coda in cui viene utilizzata la parola chiave tailrec
. Forse questo è troppo difficile per i compilatori?
È possibile aggiungere una richiesta di funzionalità per https://youtrack.jetbrains.com per la funzione di "ricorsione coda reciproca", che è la soluzione migliore se si vuole che aggiunto al Kotlin. Cerca anche lì prima, nel caso sia già richiesto o pianificato. –
Ho creato un problema Kotlin qui: https://youtrack.jetbrains.com/issue/KT-11307 – denine99