编写函数fun其功能是,根据整型形参m,计算如下公式,y=1/2!+1/4!+1/m!...

急要
1!怎么处理

第1个回答  2010-07-11
1就不会执行循环,直接返回1哈

double fun(int m)
{
double y=1;
int i;
for(i=2;i<=m;i=i+2)
{
double n=1;
for(int j=1;j<=i;j++)
{
n=n*j;
}
y+=1/n;
}
return y;
}
第2个回答  2010-07-11
double y = 0;
for ( int i = 2; i <= m; i+2)
{
y+=1/i!;
}
第3个回答  推荐于2018-03-08
float fun(float m)
{
float sum=1,i,y=0;

for(i=2;i<=m;i++)
sum*=i; //这里是求m!

while(m!=0)
{
y+=1/sum;
sum=sum/(m)/(m-1);
m-=2;
}
return y;
}

讲解一下,求m!那里应该能看得懂吧,我就不多说了。。。。

从while循环那里开始,我是进行倒退计算,每次运行y+=1/sum,循环m次,就表示y=1/m!+...+1/4!+1/2!

根据你给的公式,m比前一个数大2,所以每次m都自减2,这样就能达到上面那条倒退计算的目的了。。。。

然后就是sum=sum/(m)/(m-1),你会发觉4!比2!多乘了3和4,也就是说2!等于4!除去4再除去3。。。。

那m!的阶乘比(m-2)!的阶乘要大多少呢,当然就是多乘了m和m-1了,这里的sum表示的是m!,这样的话就能很容易地得到下一个数的阶乘了。。。。

其实算法不难想,你拿张纸,一步一步的画出来,那就很容易找到思路了。。。。本回答被提问者和网友采纳