假设我写这样的代码:科特林:尾递归的相互递归函数
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
? tailrec
关键字适用于单一函数递归,但没有更复杂的内容。我还看到一个警告,即在使用tailrec
关键字的地方找不到尾部呼叫。对于编译器来说这可能太难了?
您可以将功能请求添加到https://youtrack.jetbrains.com以获得“互尾递归”功能,如果您希望将它添加到Kotlin中,那么这是最好的选择。如果它已经被请求或计划,那么还要首先在那里搜索。 –
我在这里创建了一个Kotlin问题:https://youtrack.jetbrains.com/issue/KT-11307 – denine99