我正在尝试获取数字 66 的阶乘值,但我的方法导致输出 0。但每当我尝试获取 5 的阶乘时,它都会给我一个输出 120。谁能告诉我为什么?
public static int factorial(int n)
{
if (n == 1)
return n;
return n * factorial(n - 1);
}
最佳答案
当然 - 阶乘变得非常大,非常快。您正在 非常 快速溢出 int 的边界...并且在某个时候您将乘以足够多的因子以使溢出为 0,然后该值将永远保持为 0。
根据 Google 的快速搜索,66 阶乘是 5.44344939 × 1092 - 这远远超过 int
可以处理的范围,甚至 long
或 十进制
。你可以让 double
来处理它——你会失去大量的精度,而且它会很快积累起来,但至少它不会溢出......
关于c# - 导致错误的阶乘方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4202626/