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

时间:2016-01-27 11:07:27

标签: scala function recursion

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

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)
}

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

if else(t==n)
   removeZ(t,n)

如何删除所有零?

1 个答案:

答案 0 :(得分: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)