递归列表中的Kotlin无限循环

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

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

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

你不提供基本的情况下,这就是为什么。 因为在每次调用passHeadersxH都是自己的副本,所以永远不会是空的。 记住,当你调用drop() ,会创建一个新的列表。

 while (xH.isNotEmpty()) 

这说的是“虽然我的副本不是空的,调用passHeaders

另一方面:

 if (xH.isNotEmpty()) 

可能会做你想要的。

如果xH不为空,对这个函数的第一个调用将永远不会终止。 .drop()不会修改原始列表。