先分析问题,求n(n>=2)以内的偶数积,既2*4*6*8*...=2^(n/2)*(1*2*3*...*n/2)=2^(n/2)*(n/2)!
当n比较小的时候可以循环求阶乘:
double fun(int n)
{
double i=1.0;
double ret=1.0;
int key = n/2;
for(i=1.0;i< key ;i+=1.0)
{
ret *=2*i;
}
return ret;
}
当n比较大的时候,阶乘结果是可以近似斯特灵公式,即使在n很小的时候,斯特灵公式的取值已经十分准确。
所以
double fun(int n)
{
double pi = 3.1415926;
double e = 2.718281828;
int key = n/2;
double ret = 1.0;
ret = pow(2,key)*sqrt(2*pi*key)*pow(key/e,key);
return ret;
}
计算机只是帮助我们解决问题的工具,怎样利用好这个工具才是王道,遇到问题的时候,不能一下子就想着完全的编程,而是分析问题,简化问题,最高效率的利用资源。
重在方法