此因子实现适用于特定大小的数字:
def factorial(n:Int):Int = n match {
case 0 => 1
case x => x * factorial(x - 1)
}
我尝试使用BigInt使其适用于任何大小的数字
val zero = BigInt(0)
def factorial(n:BigInt):BigInt = n match {
case zero => 1
case x => x * factorial(x - 1)
}
每次对 factorial 的调用都会返回1,无论n的值如何。我认为这是因为第一种情况总是匹配,并且通过将其更改为
证明了这一点case zero => 22
并验证每次输入都返回了22。
所以我的两个问题是
答案 0 :(得分:5)
您应该将zero
重命名为Zero
,或者像这样使用它:
case `zero` => 1
答案 1 :(得分:3)
要匹配变量,请用“`”
包装它val zero = BigInt(0)
def factorial(n:BigInt):BigInt = n match {
case `zero` => 1
case x => x * factorial(x - 1)
}