【发布时间】:2021-07-19 11:42:35
【问题描述】:
下面的代码似乎可用于计算阶乘。
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
n=int(input("Input a number to compute the factiorial : "))
print(factorial(n))
例如阶乘 5 = 120。这可以使用以下代码。
但是,当我使用 Python IDLE 输入“1003”作为输入时,输出为 6。
谁能解释一下?截图如下。
重要提示:只有在我运行了几个测试时才会发生这种情况:
例如尝试 999、1000,然后是 9000,然后是 1003。在最后一次测试中,6 作为输出出现。 IDLE 中发生了什么导致这种情况?
【问题讨论】:
-
您的 Python 版本似乎没有大量支持。我无法在 macos 上使用 Python 3.9.4 重现这一点。
-
当然这是一个重大错误.....如果结果不可靠,怎么可能有人去测试。我以前从未听说过“大量支持”...
-
对于 n>998,我得到“运行时错误:超出最大递归深度”。也许这发生在您的情况下,但会导致不同的错误行为?您可以通过计算更温和的函数来检查这一点(例如算术级数的总和)。
-
在你断定世界经济危在旦夕之前,请三重检查你的本地 Python 安装:它是如何安装的,在什么 Windows 版本上,什么机器类型(即 32 位、64 位);更新版本的 Python 问题是否会消失,与
math.factorial等相比如何? -
3.9.0 ...问题不是计算阶乘的最佳方法,而是这个版本的内部工作原理。它在 repl.it 上运行良好,但为什么 IDLE 会产生这个结果。
标签: python recursion factorial