【发布时间】:2015-08-30 10:00:56
【问题描述】:
目前正在学习 Scala,特别是学习模式匹配,我在 Scala 中编写了这个简单的阶乘方法:
def factorial(n : Int) : Int = {
if(n <= 1)
1
else
n * factorial(n -1)
}
然后我想,我可以使用模式匹配并写下这个:
def fact(n : Int) : Int = n match {
case 0 => 1
case n => n * fact(n -1)
}
但我认为模式匹配的重点是对数据进行排序,为什么我需要在阶乘之类的东西上使用它?
非常感谢。
【问题讨论】:
-
你不需要这样做。但你可以,正如你刚刚证明的那样。
-
这很可爱。斐波那契会更可爱,因为您需要两个初始设置。但是通过递归做斐波那契也有点傻,因为它不能很好地扩展。
-
@Paul:是什么让您说斐波那契的递归实现无法扩展?尾递归实现与迭代实现一样可扩展。
-
@Marth 我不是其可扩展性方面的专家,但我似乎记得因为斐波那契是随着 N 的增长而变得难以计算的函数之一除非值被记忆。
-
@Marth 很高兴知道。我发现了更多here