本题要求编写程序,计算序列 2 / 1 + 3 / 2 + 5 / 3 + 8 / 5 + . . . 2/1+3/2+5/3+8/5+... 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。
输入样例:
20
输出样例:
32.66
分析:从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。若第一项为
a
b
\frac{a}{b}
ba,后一项就是
a
+
b
a
\frac{a+b}{a}
aa+b=1+
b
a
\frac{b}{a}
ab,第三项就是
1
1
+
b
/
a
+
1
\frac{1}{1+b/a}+1
1+b/a1+1
每一项都是前一项的倒数+1,最好用递归
来处理
以下列fact函数举例,fact(4)=1/fact(3)+1、fact(3)=1/fact(2)+1、fact(2)=1/fact(1)+1、fact(1)=2.0
所以fact(4)=1.6,可得fact(n)的所有值,在主函数中加上即可
#include <stdio.h>
#include <math.h>
double fact(int n);
int main(){
int n;
scanf("%d",&n);
double sum;
for(int i=1;i<=n;i++){
sum+=fact(i);
}
printf("%.2f",sum);
return 0;
}
double fact(int n){
double a1=2.0;
double sum=0.0;
if(n==1){
return a1;
}
else{
return (1.0/fact(n-1))+1;
}
}