当n非常大时,例如 n>=1000000000,直接用递归或者循环来进行n的阶乘计算存在两个问题,一个是时耗增加,一个是数据上溢。
有一个改进的斯特林公式,直接计算结果,并且精度较高。
公式如图:
它的fortran代码如下:
当n=1000000000时,计算结果如下:
即:
1000000000! = 99046061686752510^8565705522
1751年,欧拉以大写字母M表示m阶乘,即M=1×2×3×…×m
1799年,鲁非尼在他出版的方程论著述中,则以小写字母π表示m阶乘,而在1813年,高斯则以Π(n)来表示n阶乘。而用来表示n阶乘的方法起源于英国,但仍未能确定始创人是谁。直至1827年,由于雅莱特的建议而得到流行,现在有时也会 以这个符号作为阶乘符号。
而最先提出阶乘符号n!的人是克拉姆 (1808),后来经过欧姆等人的提倡而流行,直至现在仍然通用。
当n较大时,直接计算n!变得不可能,这时可通过斯特灵(Stirling)公式计算近似算或取得大小范围。
int fun(int n) //这儿就只考虑正数的情况
{
if (n == 0 || n == 1)
return 1;
else
return fun(n-1)n;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)