C++ c+中是否有内置的阶乘函数+;?

C++ c+中是否有内置的阶乘函数+;?,c++,C++,我已经找过了,但找不到这个。有人告诉我,如果C++中有任何内置的阶乘函数,那么< p>不,标准库中没有这样的函数。< p>虽然C语言库没有专门为计算阶乘定义的函数,但是C MaLabor允许您计算。因为Γ(n)=(n-1)!对于正整数,使用i+1产生i 如果使用用户定义的阶乘函数,将打印相同的数字: for (int i = 1 ; i != 10 ; i++) { printf("%lld %f\n", factorial(i), tgamma(i+1)); } 注:< /强>考

我已经找过了,但找不到这个。有人告诉我,如果C++中有任何内置的阶乘函数,那么

< p>不,标准库中没有这样的函数。

< p>虽然C语言库没有专门为计算阶乘定义的函数,但是C MaLabor允许您计算。因为Γ(n)=(n-1)!对于正整数,使用
i+1
产生
i

如果使用用户定义的阶乘函数,将打印相同的数字:

for (int i = 1 ; i != 10 ; i++) {
    printf("%lld %f\n", factorial(i), tgamma(i+1));
}


<强>注:< /强>考虑对阶乘函数进行编码是多么容易,用伽马计算阶乘就像用大锤击苍蝇一样。

< P>不,在标准C++中,没有阶乘函数。但您可以在boost库中找到相同的功能:

STL不提供阶乘函数,但您可以在一行中递归计算:

int fact(int n){

     return (n==0) || (n==1) ? 1 : n* fact(n-1);
}

在C++ STL中,没有找到因子的函数。


您应该编写自己的函数来查找阶乘

编写一个慢版本的阶乘,即使在C或C++中使用DP也是很容易的。但是,在Python 3中实现了一个更快的算法:


因此,最好将其添加到STL imho中。

为什么不自己编写?
return(n==1 | | n==0)?1:阶乘(n-1)*n
您可以实现自己的函数。如果你关心非平凡情况下阶乘的精确值,你最终会需要某种大的int类型。C++没有大的int类型,所以我想这就是为什么没有标准的阶乘函数存在。@ SUMET,因为你不想编写你自己的STD::矢量。Ninja用了几秒钟的时间。但是使用这个函数可能不是个好主意。这是一个类似于std::pow(x,2)
的过度杀伤力,所以他们实际上是为了这个而用宏来破解函数重载的?0.o谈论来自的
tgamma
。@BaummitAugen是的,这是一些严重的黑客行为!看起来像是
tgmath.h
math.h
@UKMonkey中的所有函数都执行此操作,在溢出
long
之前,您可以执行多少操作?你可以做所有这些,我的意思是,所有20个,预先,将结果存储在一个查找表中,并在你需要的时候得到你的阶乘。预计算总共需要20次乘法:-):-):-):-)也许值得一提的是,还有一个函数返回gamma函数的自然对数。这解决了数值问题,即伽马函数的值很容易不适合
,甚至不适合
。阶乘函数只需要一个简单的for循环,并且您不太依赖编译器优化不必要的函数调用。
int fact(int n){

     return (n==0) || (n==1) ? 1 : n* fact(n-1);
}