【问题标题】:Logic on a recursive method递归方法的逻辑
【发布时间】:2016-01-26 18:33:08
【问题描述】:

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

例如:List {"a", "b", "c"} 将返回 列出{"a","c"}

我正在用 scala 编写,我知道它已经内置在库中,但我不应该使用这些。我只能使用 if/else、辅助方法和模式。

如何仅使用头尾来解析列表?

到目前为止我有这个:

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

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

【问题讨论】:

    标签: scala recursion logic


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:
    • 您正确地说明了递归的一个基本情况:如果列表为空,则结果再次为空列表。 case Nil => Nil
    • 还有第二种基本情况:包含单个元素的列表又是列表本身。 case x :: Nil => x :: Nil
    • 您可以按如下方式制定递归步骤:给定一个包含至少两个元素的列表,结果是一个包含第一个元素的列表,然后是列表中第二个元素之后的所有其他元素。 case x :: y :: z => x :: removeLetter(z)(注意这里xy都是String类型,而zList[String]类型)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-12
      • 2012-08-02
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多