嗨,我正在研究一些有关scala的示例。有一种称为乘积的方法,它将乘以给定数字范围内给定函数的所有结果。
例如。product(somefunction:Int => Int)(低边界:Int,高边界:Int)
以下将给定范围内的所有阶乘结果相乘:
def product(f: Int => Int)(a: Int, b: Int): Int = {
if (a > b) 1
else f(a) * product(f)(a + 1, b)
}
def fact(x: Int, y: Int) = product(sFact)(x, y)
def sFact(c: Int): Int = if (c == 0) 1 else c * sFact(c - 1)
fact(3, 7)
fact(3,7)的结果是(-错误!):
//> res0: Int = -1718845440
谁能告诉我为什么?
结果大于2 31 -1(Int.MaxValue
),因此发生数字溢出。你要做的所有的计算模某个值,或更换Int
用Long
或BigInt
随处可见。但是,Long
如果参数变大(Long.MaxValue
为2 63 -1 == 9223372036854775807),计算也将开始溢出。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句