如何创建scala递归方法

如何创建scala递归方法,scala,methods,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

我试图帮助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)
    }
}

我正在寻找一种更好的方法

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


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

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

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

更好的方法是在列表上使用标准库的
filter
方法:
lst.filter(x=>x!=numberToRemove)
您试图删除的“给定数字”是哪个参数?为什么不能使用库?这是家庭作业吗?@Eduardo这似乎是一个安全的假设,这是家庭作业……或者至少是一个学习练习。@Varoag你没有什么?你的意思是你没有一个带有你要删除的数字的变量吗?现在这让人非常困惑,因为你的问题表明你想写一个从列表中删除给定数字的方法。这听起来好像你需要两个参数而不是一个。OP明确要求不要给出所有的代码。此外,您的版本有一个微妙的错误,在某些情况下无法给出正确的结果。@Code学徒:虽然这个答案破坏了学习体验,但我看不到有人明确要求不要泄露代码。@Eduardo@Eduardo此外,更重要的是,这个答案并不完全正确。实际上不止一个错误。