从列表中删除数字的Scala递归函数需要工作

use*_*432 0 recursion scala function

我有一个递归方法,其中删除它应该来自给定列表的所有零.

def removeZ(list:List[Int], n:Int):List[Int] = list match {
  case Nil => Nil
  case h::t=>
    if (h == n)
      t
    else 
      h :: removeZ(t,n)
}
Run Code Online (Sandbox Code Playgroud)

这将从列表中删除一个零,但如果列表有多个零,则不会.我尝试添加另一个if else语句,它不起作用,例如:

if else(t==n)
   removeZ(t,n)
Run Code Online (Sandbox Code Playgroud)

如何删除所有零?

End*_*Neu 7

那是因为在第一个0之后你返回尾部,你必须继续迭代:

scala> def removeZ(list: List[Int], n: Int): List[Int] = list match {
   |     case Nil => Nil
   |     case h :: t =>
   |       if (h == n)
   |         removeZ(t, n) // 0 found, skip it and iterate the tail
   |       else
   |         h :: removeZ(t, n)
   |   }
removeZ: (list: List[Int], n: Int)List[Int]

scala> removeZ(List(1,0,2,0,3), 0)
res0: List[Int] = List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)