Python中的阶乘函数问题(参见代码)

时间:2017-11-03 05:14:11

标签: python algorithm python-3.x function numpy

我使用numpy制作了一个阶乘函数。这是代码:

import numpy as np

def factorial(x):
    n=[]
    if x==1:
        return 1
    if x>1:
        while x>1:
            x-=1
            n.append(x+1)
    return np.prod(np.array(n))

该功能在阶乘(12)之前确实有效。

另一方面,这个适用于任何数字:

def fact(n):
    num = 1
    while n > 1:
        num *= n
        n -= 1
    return num

例如,当我尝试计算20时,情况变得更糟!:

factorial(20)
Out[65]: -2102132736            #Wrong

fact(20)
Out[66]: 2432902008176640000    #Correct

有人能帮我理解我的功能有什么问题吗? 提前致谢

1 个答案:

答案 0 :(得分:2)

因为你正在使用使用C风格的固定精度整数的numpy库,它们会溢出。这就是你的阶乘函数中发生的事情。要解决这个问题,你必须构造一个dtype' int64'对于较大的阶乘。

我想补充一点,这不会出现在普通的Python整数中,因为语言在溢出之前会自动将它们转换为长整数。