这是无限循环,在clojure这样的事情就好了
tailrec fun passHeaders (xH: List<Int>)
{
while (xH.isNotEmpty())
{
passHeaders(xH.drop(1))
}
}
答案 0 :(得分:2)
List.drop
不会改变List
,而是生成一个新的List
实例。因此,你while
循环是无限的。
答案 1 :(得分:2)
您没有提供基本案例,这就是原因。因为在每次调用passHeaders
时,xH
都是它自己的副本,所以它永远不会为空。请记住,当您致电drop()
时,会创建一个新列表。
while (xH.isNotEmpty())
这说的是“当我的xH
副本不为空时,请致电passHeaders
。
另一方面:
if (xH.isNotEmpty())
可能会按你的意愿行事。
答案 2 :(得分:0)
如果xH
不为空,则对此函数的第一次调用永远不会终止。 .drop()
无法修改原始列表。