Kotlin infinity循环列表中的递归

时间:2017-06-08 19:30:01

标签: kotlin

这是无限循环,在clojure这样的事情就好了

tailrec fun passHeaders (xH: List<Int>) 
{
    while (xH.isNotEmpty())
    {
        passHeaders(xH.drop(1))
    }
}

3 个答案:

答案 0 :(得分:2)

List.drop不会改变List,而是生成一个新的List实例。因此,你while循环是无限的。

答案 1 :(得分:2)

您没有提供基本案例,这就是原因。因为在每次调用passHeaders时,xH都是它自己的副本,所以它永远不会为空。请记住,当您致电drop()时,会创建一个新列表。

while (xH.isNotEmpty())

这说的是“当我的xH副本不为空时,请致电passHeaders

另一方面:

if (xH.isNotEmpty())

可能会按你的意愿行事。

答案 2 :(得分:0)

如果xH不为空,则对此函数的第一次调用永远不会终止。 .drop()无法修改原始列表。