递归方法的逻辑

时间:2016-01-26 18:33:09

标签: scala recursion logic

我的一个练习要求我编写一个递归方法,其中给出一个列表,并返回相同的列表,其中只包含其他所有元素。

例如:列表{“a”,“b”,“c”}将返回               列表{ “一”, “C”}

我是用scala编写的,我知道它已经内置了库,但我不应该使用它们。我只能使用if / else,helper方法和模式。

我怎样才能使用头部和尾部解析列表?

到目前为止,我有这个:

def removeLetter(list:List[String]):List[String]=list match{

 case Nil => Nil
 case n::rest=>  

  if (n == rest){  // I understand that this doesn't quite work.
     tail
   }
  else
     head::removeLetter(tail)
  }
   }

我正在寻找逻辑,而不是代码。

2 个答案:

答案 0 :(得分:2)

使用模式匹配,您也可以使用与n::rest构造相同的方式解构前两个元素的列表。请记住还要考虑长度不均匀的列表。

答案 1 :(得分:0)

  • 您正确地向递归说明了一个基本情况:如果是空列表,则结果再次为空列表。 case Nil => Nil
  • 还有第二种基本情况:包含单个元素的列表也是列表本身。 case x :: Nil => x :: Nil
  • 您可以按如下方式制定递归步骤:给定一个包含至少两个元素的列表,结果是包含第一个元素的列表,后跟第二个元素之后的列表中的每个其他元素。 case x :: y :: z => x :: removeLetter(z)(请注意,此处xy都属于String类型,z类型为List[String]

备注:如果你愿意,你也可以结合两种基本情况,因为在这两种情况下,函数的输入都是它的输出。