У меня есть следующий код, который я не понимаю, почему это не хвостовая рекурсия:
override fun drop(n: Int): List<A> = if (n == 0) this else tail.drop(n - 1)
, тогда как это хвостовая рекурсия:
fun drop(n: Int): List<A> {
tailrec fun drop(n: Int, list: List<A>): List<A> =
if (n <= 0) list else when (list) {
is Cons -> drop(n - 1, list.tail)
is Nil -> list
}
return drop(n, this)
}
Почему первый пример не хвостовая рекурсия?