第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!,这样的话就能很容易地得到下一个数的阶乘了。。。。
其实算法不难想,你拿张纸,一步一步的画出来,那就很容易找到思路了。。。。本回答被提问者和网友采纳