我正在尝试创建一个递归方法,它将从列表中删除0并返回该列表。
def removeZero(lst: List[Int], num: Int) = lst match {
case h :: tail => if (h == num)
tail
else
h :: removeZero(lst, num)
case List() => List()
}
但是这不会编译。我收到StackOverflow错误。我试图找出问题所在。
答案 0 :(得分:0)
看起来你想要:
def removeZero(lst: List[Int], num: Int): List[Int] = lst match {
case h :: tail => if (h == num)
tail
else
h :: removeZero(tail, num)
case List() => List()
}
您在非空案例中的条件应将头部与num
进行比较,而不是方法removeZero
。在else
分支中,您应该通过将尾部传递给递归调用而不是整个列表来递归列表。