标准库因子函数.Net

时间:2015-06-03 14:04:22

标签: c# .net f#

我似乎无法在.Net中找到任何内置的阶乘函数,我觉得这很奇怪。 在许多语言中,例如python,标准库中有一个阶乘函数......

  • 我不希望每次需要时都能创建自己的阶乘函数 解决方案。

  • 我不想从Nuget那里得到一些图书馆 阶乘函数,这只是愚蠢......

  • 我希望在F#和C#中都使用阶乘函数。

谷歌搜索淹没在想要编写或展示如何编写自己的阶乘函数的人身上。

我是否忽略了阶乘函数,或者System.Math,System.Numerics或其他任何地方是否真的没有内置的阶乘函数? (如果没有任何因子函数存在)标准库,那么在任何标准库中没有这个功能的动机是什么?)

是的我知道写起来很简单,并且可以像例如

那样定义
let rec factorial = function
    | x when x = 0 -> 1
    | x -> x*factorial(x-1)

但是我不想每次都需要这个函数来写这个函数,而且为了这种简单的函数创建我自己的库也感觉很傻......

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];
}