int f(int n)
{
if (n == 1)
return 1;
else if (n == 2)
return 2;
else
return f(n - 1) + f(n - 2);
}
double fun(int n)
{
int i = 0;
double sum = 0;
for (i = 1; i <= n; i++)
{
sum = sum + 1 / sqrt(f(i)) * pow((-1), (i - 1));
}
return sum;
}
int main()
{
int n;
double s;
scanf("%d", &n);
s = fun(n);
printf("%lf", s);
return 0;
}
这是我的思路
请问怎么用递归的方法只构造一个函数就能实现求该数列的前n项和呢
n=1的时候截至,不等于1的时候,return flag *1.0/sqrt(n)+ fun(n-1)
代码如下:
#include <stdio.h>
#include <math.h>
double fun(int start,int end,int a,int b)// 0 end 0 1
{
int flag = 1;
static double sum = 0;
if(start%2==0)
flag = -1;
else
flag = 1;
if(start <= end)
{
sum = sum + flag*1.0/sqrt((double)b) + fun(start+1,end,b,a+b);
}
return sum;
}
int main()
{
int n;
double sum = 0;
scanf("%d", &n); //输入n的值
sum = fun(1,n,1,1);
printf("%lf\n", sum);
return 0;
}