在數學上,有時候需要計算階乘,即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函數定義,然後依次進行測試:

當 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))
;;
其中的rec代表函數是一個遞歸函數,bigint類型代表大整數類型,match with進行模式比對,when後面可以根據條件來進行比對,其中的bigint(n)可以将普通的數值n轉換成bigint類型。執行此示例,截圖如下: