64,633
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
double recu(int n)
{
if (n == 1)
return 1;
else
return 1/( ( n % 2 == 0? -1.0 : 1.0 ) * n) + recu(n - 1);
}
int main(void)
{
printf("%lf", recu(2));
return 0;
}
随手用C写的
尾递归,效率不会很低的。。激进点的优化器可以直接把递归优化成循环
/* 迭代算法函数 */
float sum_iter(int n)
{
float sum = 0.0;
int i;
for(i=1; i<=n; i++)
{
int sign = 1;
if(i % 2 == 0)
{
sign = -1;
}
sum += 1/(float)i * sign;
}
return sum;
}
float sum(int i,float & f,int n);
int main()
{
float sum_n=0.0;
float f=0.0;
int n=0;
cout<<"请输入一个正整数: "<<endl;
cin>>n;
sum_n=sum(1,f,n);
cout<<sum_n*4<<endl;
return 1;
}
float sum(int i,float & f,int n)
{
if(i%2==0 )
{
f -= 1.0/i;
}
else if(i%2!=0 )
{
f += 1.0/i;
}
if(i<n)
return sum(i+1,f,n);
else
return f;
}