#include
#include
float f( int n )
{
if ( n==1 )
return 1;
else if ( n==2 )
return 2;
else
return f(n-1)+f(n-2);
}
int main()
{
int n,i;
float s=0,x;
printf( "n==" );
scanf( "%d", &n );
printf( "x==" );
scanf( "%f", &x );
if ( n==1 )
s = f(1)/(x*f(2));
else if ( n==2 )
s = f(1)/(x*f(2))-f(2)*x/f(3);
else {
for( i=3; i<=n; i++ )
s = s + f(n)/(f(n+1)*x);
s = s + f(1)/(x*f(2))-f(2)*x/f(3);
}
printf( "s==%f", s );
return 0;
}
/*******************************************************************************************
我用Mingw编译运行通过。在n==3,x=1时与笔算结果符合。
*******************************************************************************************/
/*
要是去除第二项-2*x/3的话规律比较明显(分子和分母系数构成斐波那契数列) 。
所以计算时去除-2*x/3,单独计算-2*x/3的结果
注意,每项都可以使用前一项作为中间值,如果每次都重新计算f(n)效率非常低。
s = -3.811311 (x=6.66,n=8)
*/
#include "stdio.h"
int main()
{
int n=8;
double x=6.66;
double s =0;
int i;
int fz=1;
int fm=2;
for( i=0; i
s += fz/(fm*x);
fz += fm;
fm = fz + fm;
}
if(n>=2)
{
s+=-2*x/3;
}
printf("result is:%lf\n",s);
return 0;
}