Swift 3计算阶乘数。结果变得太高了?

时间:2017-05-07 10:00:25

标签: swift int factorial

我已经写了这个函数来返回给定数字的阶乘

func factorial(_ n: Int) -> Int {
    if n == 0 {
        return 1
    }
    else {
        return n * factorial(n - 1)
    }
}

print( factorial(20) )  // 2432902008176640000
只要给定的数字不超过20,就可以正常工作,因为那时结果会变得太高?

如何绕过这个限制,从而计算出更高数字的阶乘?

已经搜索过并为Swift找到了一些bignum库,我这样做是为了学习并熟悉Swift,因此我想自己解决这个问题。

1 个答案:

答案 0 :(得分:1)

您可以使用此库: BigInt

使用CocoaPods安装它:

pod 'BigInt'

然后你可以像这样使用它:

import BigInt

    func factorial(_ n: Int) -> BigInt {
        if n == 0 {
            return 1
        }
        else {
            return BigInt(n) * factorial(n - 1)
        }
    }

    print( factorial(50) )  // 30414093201713378043612608166064768844377641568960512000000000000