【问题标题】:Program to compute factorial produces output of 6 for factorial 1003计算阶乘的程序为阶乘 1003 产生 6 的输出
【发布时间】: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


【解决方案1】:

也许 JS 解决方案会帮助你:

function factorial (y){
    if (y ==0 || y ==1){
        return 1;
    }
    else {
        f = y - 1;
        while (f >= 1) {
            y = y * f;
            f--;
        }
        return y;
    }
}
console.log(factorial(100));

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 2015-04-19
    • 2013-02-19
    • 2022-01-17
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多