【发布时间】:2020-05-17 22:36:54
【问题描述】:
def penultimate(l:List[Int]):Int = l match{
case x::y::Nil => x
case x::tail => penultimate(tail)
case _ => ???
}
倒数第二个是列表中最后一个元素之前的元素。
在第一种情况下,我们有一个包含 2 个元素的列表。哪个是基本情况?
第二种情况,我们将递归调用链表尾部的相同方法。每次递归调用,列表中的元素数量都会减少。
最后一种情况到底是什么?第三种情况何时会发生?
【问题讨论】:
-
对,就是空列表,只能抛出异常。
-
空列表或只有一个元素的列表的倒数第二个是多少?确实没有,所以您要么抛出异常,要么不重新调整 Int,而是返回一个 Option[Int]。
-
所以最好替换 case _ => ???按大小写 _ => Option[Int] ?
-
@user90379 这取决于您认为最佳实践,但在函数式编程中,是的,这个想法不是抛出异常。所以最终的代码就像this
标签: list scala recursion pattern-matching