如何用F#实现大整数阶乘1000!

【摘要】 在数学上,有时候需要计算阶乘,即n! = 1 * 2 * 3 * … (n – 1) * n ,由于int类型的长度限制,当n比较大的时候,则n!可能就无法得出正确的计算结果。此时就需要用到大整数类型bigint。

在数学上,有时候需要计算阶乘,即n! = 1 * 2 * 3 * … (n – 1) * n ,由于int类型的长度限制,当n比较大的时候,则n!可能就无法得出正确的计算结果。此时就需要用到大整数类型bigint。

下面介绍一下如何用F#语言实现一个计算阶乘的函数,首先用int类型来进行定义,看看会发生什么,代码如下:

let rec fact n =
  match n with
  | i when i < 0 -> 0
  | 0 | 1 -> 1
  | _ -> n * fact(n-1) 
  ;;

在命令行输入 dotnet fsi进入F#交互界面,并首先执行fact函数定义,然后依次进行测试:

13.jpg

当 n = 3时,则 计算结果为 6 ,可当n=20时,计算结果应该为2432902008176640000,但是输出结果却为负数,说明已经超出int长度了,无法正确给出计算结果。下面用大整数bigint来解决这个问题。

将上述代码修改如下:

let rec bfact (n) : bigint = 
    match n with
        | i when i < 0 -> bigint.Zero
        | 0 | 1 -> bigint(1)
        | _ -> (bfact(n-1) * bigint(n)) 
        ;;

15.jpg

14.jpg

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享