Я немного смущен, если следующая функция является хвостовой рекурсивной, или у компилятора Kotlin, или у IntelliJ Idea есть проблема.
Насколько я понимаю, это не подходит для оптимизации tailrec
, потому что рекурсивный вызовэто не последний звонок.Вот код:
tailrec fun hasRouteBetween(first: GraphNode, second: GraphNode): Boolean {
if (first.id == second.id) return true
if (second.children.isEmpty()) return false
second.visited = true
for (child in second.children) {
if (!child.visited) {
return hasRouteBetween(first, child)
}
}
return false
}
data class GraphNode(val id: Int, var visited: Boolean = false, val children: LinkedList<GraphNode>)
В соответствии с документами Kotlin, сообщениями на форуме и некоторыми SO-ответами, которые я нашел, это использование должно быть помечено как предупреждение.
Я также включил предупреждения компилятора на компиляторе IntelliJ Kotlin.Но я не вижу никаких предупреждений о IntelliJ (IntelliJ IDEA 2018.3.3 (Ultimate Edition - сборка № IU-183.5153.38, построена 9 января 2019 г.) или Gradle (5.2). Я использую Kotlin 1.3 с Java 1.8_141.
Что мне здесь не хватает? (Я хочу убедиться, что я правильно использую tailrec
, потому что этот код будет предоставлен другим). Любая помощь будет принята.