我似乎无法在.Net中找到任何内置的阶乘函数,我觉得这很奇怪。 在许多语言中,例如python,标准库中有一个阶乘函数......
我不希望每次需要时都能创建自己的阶乘函数 解决方案。
我不想从Nuget那里得到一些图书馆 阶乘函数,这只是愚蠢......
我希望在F#和C#中都使用阶乘函数。
谷歌搜索淹没在想要编写或展示如何编写自己的阶乘函数的人身上。
我是否忽略了阶乘函数,或者System.Math,System.Numerics或其他任何地方是否真的没有内置的阶乘函数? (如果没有任何因子函数存在)标准库,那么在任何标准库中没有这个功能的动机是什么?)
是的我知道写起来很简单,并且可以像例如
那样定义let rec factorial = function
| x when x = 0 -> 1
| x -> x*factorial(x-1)
但是我不想每次都需要这个函数来写这个函数,而且为了这种简单的函数创建我自己的库也感觉很傻......
答案 0 :(得分:-3)
你可以utilise the BigInteger
class
但是,如果您对基本类型的性能解决方案感兴趣,这应该可以解决问题:
private static readonly int[] factorial = new int[]{
1,
1,
2,
6,
24,
120,
720,
5040,
40320,
362880,
3628800,
39916800,
479001600,
1932053504,
};
public static int Factorial(int x) {
if(x < 0) {
throw new ArithmeticException("negative faculty");
}
if(x >= faculty.Length) {
throw new OverflowException();
}
return faculty[x];
}