【发布时间】:2016-06-13 09:14:51
【问题描述】:
假设我这样写代码:
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))
}
如何让 Kotlin 优化这些相互递归的函数,以便我可以运行 main 而不会引发 StackOverflowError? tailrec 关键字适用于单函数递归,但没有更复杂的。我还看到一条警告,在使用 tailrec 关键字的地方找不到尾调用。也许这对编译器来说太难了?
【问题讨论】:
-
您可以向youtrack.jetbrains.com 添加功能请求以获取“相互尾递归”功能,如果您希望将其添加到 Kotlin,这是最好的选择。如果已经请求或计划了,也请先在那里搜索。
-
我在这里创建了一个 Kotlin 问题:youtrack.jetbrains.com/issue/KT-11307
标签: recursion kotlin tail-recursion