OCaml预测值为0
我想要一个计算纳拉亚纳数的代码 但是,对于超过20的数字,它开始显示“0” 什么可能会失败OCaml预测值为0,ocaml,sequence,factorial,Ocaml,Sequence,Factorial,我想要一个计算纳拉亚纳数的代码 但是,对于超过20的数字,它开始显示“0” 什么可能会失败 let rec factorial n = if n <= 1 then 1 else factorial (n-1) * n;; 让rec阶乘n= 如果n你遗漏了一段代码,那就是factorial(n)作为分子: let binomial_coeff (n:int) (k:int) = if k = 0 || k = n then 1 else factorial
let rec factorial n =
if n <= 1 then 1
else factorial (n-1) * n;;
让rec阶乘n=
如果n你遗漏了一段代码,那就是factorial(n)
作为分子:
let binomial_coeff (n:int) (k:int) =
if k = 0 || k = n then 1
else factorial (n) / (factorial (k) * factorial (n-k));;
您遗漏了一段代码,即阶乘(n)
作为分子:
let binomial_coeff (n:int) (k:int) =
if k = 0 || k = n then 1
else factorial (n) / (factorial (k) * factorial (n-k));;
factorial 21
溢出并返回不正确的结果。
在我的64位设置中,max_int
的值是4611686018427387903,刚好在20之间!还有21
为了解决这个问题,您可以避免实际计算n的值!(或k!)ub二项系数
。而是计算更复杂的值。例如,而不是n/k代码>,您可以使用(k+1)*(k+2)*…*n
factorial21
溢出并返回不正确的结果。
在我的64位设置中,max_int
的值是4611686018427387903,刚好在20之间!还有21
为了解决这个问题,您可以避免实际计算n的值!(或k!)ub二项系数
。而是计算更复杂的值。例如,而不是n/k代码>,您可以使用(k+1)*(k+2)*…*n
你在第三行写了fatorial
而不是factorial
你在第三行写了fatorial
而不是factorial
“它开始显示“0”?什么是“它”?这不是阶乘函数,正如其他人指出的那样,它的溢出量超过了20。您应该包含生成0的代码。“它开始显示“0”?什么是“它”?这不是阶乘函数,正如其他人指出的那样,它的溢出量超过了20。您应该包含生成0的代码。