【发布时间】:2018-12-02 22:21:21
【问题描述】:
我在 Kotlin 中编写了这个递归函数:
fun recursive(target: String, population: Population, debugFun: (String) -> Unit) : Population {
if (population.solution(target).toString() == target) {
return population
}
debugFun.invoke(population.solution(target).toString())
return recursive(target, population.evolve(target), debugFun)
}
它将运行不确定的次数(因为我使用随机性来收敛进化算法中的解决方案)。我经常遇到堆栈溢出。 Kotlin/JVM 语言的最大堆栈深度是多少?我应该只以非递归方式编写函数吗?
【问题讨论】:
-
或者我应该以这样一种方式编写它,即在函数的尾行进行递归调用以允许编译器使用尾递归进行优化?我不完全理解编译器如何优化尾递归。
-
我已经编辑了问题以使用尾递归,因为同样的问题仍然存在!
-
Koltin 编译器尚未针对尾递归进行优化。您可以在集合上使用扩展函数而不是递归。
标签: recursion kotlin stack-overflow tail-recursion