如何创建scala递归方法

时间:2016-01-25 17:36:00

标签: scala methods

我正在尝试帮助scala中的递归方法从列表中删除特定数字并返回没有给定数字的列表。 我只能使用if / else语句和配对(::)

到目前为止,我有这个,但我不知道如何从scala列表中删除项目。

def removeNum(lst: List[Int]): lst2:List[Int] = lst match { 
var lst2:Int
case Nil =>0
case h::t=>{ 
  if(h !=0)
      lst2(h)// how do I iterate thru the list without using foreach?    
   }
else {
   removeNum(rest)
    }
}

我正在寻找更好的方法来解决这个问题。

2 个答案:

答案 0 :(得分:4)

基本方法是将“给定数字”与列表首部进行比较。如果匹配,则仅在列表的其余部分返回递归结果。否则,返回通过保留列表的头部并在列表的其余部分上递归而创建的列表。请注意,更容易考虑是否保持列表的头部而不是从列表中考虑删除元素。

请注意,这需要第二个参数:您要删除的“给定数字”。

答案 1 :(得分:-3)

虽然我认为您应该使用过滤器,但您可以使用:

def removeNum(xs: List[Int], toRemove: Int): List[Int] = xs match {
  case x :: xss => if (x == toRemove)
    removeNum(xss, toRemove)
  else
    x :: removeNum(xss, toRemove)
  case List() => List()
}