C++ c+中是否有内置的阶乘函数+;?
我已经找过了,但找不到这个。有人告诉我,如果C++中有任何内置的阶乘函数,那么< p>不,标准库中没有这样的函数。< p>虽然C语言库没有专门为计算阶乘定义的函数,但是C MaLabor允许您计算。因为Γ(n)=(n-1)!对于正整数,使用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)); } 注:< /强>考
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);
}