python - 阶乘函数中返回负数 (Python)

标签 python numpy factorial negative-number

我有以下代码来计算n!

import numpy as np

print "n! (for n<31)"
print

n = input("Enter n: ")

lst = []
for i in range(1,n+1):
    lst.append(i)

print lst     #Just to see if the program is working

print "n!: ", np.prod(lst)

但是,对于某些数字,程序会返回负值。

例如。 以下是我运行 n = 20 时的控制台:

n! (for n<31)

Enter n: 20
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
n!:  -2102132736

当 n = 32 时也会发生这种情况 但是,该程序确实适用于其他号码,例如。 3!返回 6,这是应该的。

有人可以解释一下吗?

最佳答案

这里是 numpy 的 prod 函数的文档链接:

numpy.prod

如果您转到该页面的底部,您会看到最后一个示例,说明当 x(函数的给定参数)是无符号整数时,返回的结果是默认平台整数。因此,当结果超出 32 位整数所能存储的范围时,numpy 不会像 python 通常那样将结果转换为 long 类型。所以你会遇到整数溢出。

如果你声明一个函数:

def fact(n): return 1 if n == 1 else (n * fact(n-1))

然后做:

fact(20)

你得到:

2432902008176640000L

这是 20 的正确值!

顺便说一下,正在做:

lst = []
for i in range(1,n+1):
    lst.append(i)

并不理想。 Python 的 range 函数可以轻松做到这一点!尝试:

lst = range(1, n + 1)

您已经在 for 循环中执行此操作了!您可以在解释器中测试它:

>>> range(1, 20 + 1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

关于python - 阶乘函数中返回负数 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18227957/

相关文章:

python - 识别隐式字符串文字连接

python - 如何使用PIL Image在Django网页中输出图像

python - 将 numpy 数组项放入 "bins"

C++函数计算阶乘返回负值

c - 大输出的浮点异常

java - Factorial - 未解析的编译,必须返回 int 类型的结果

python - __iter__ 和 __getitem__ 有什么区别?

python - 索引错误 : index 2 is out of bounds for axis 0 with size 2

Python Pandas 如何找到同时出现的顶级字符串?

python - numpy:如何向现有结构化数组添加列?