【描述】
有一个分数序列:2/1、3/2、5/3、8/5、13/8、21/13、.... 求这个分数序列的前n项之和。
【输入】
输入一个正整数n。
【输出】
输出分数序列的和,结果保留4位小数。
【输入示例】
99
【输出示例】
160.4849
//#include<stdio.h>
//double f(int n){
// if(n==2)
// return 3;
// if(n==1)
// return 2;
// else
// return f(n-1)+f(n-2);
//}
//double g(int n){
// if(n==2)
// return 2;
// if(n==1)
// return 1;
// else
// return g(n-1)+g(n-2);
//}
//
//int main(){
// int n,i;
// double sum=0;
// scanf("%d",&n);
// for(i=1;i<=n;i++){
// sum=sum+f(n)/g(n);
//
// }
// printf("%.4f",sum);
//
//}
//上面这个递归运行要超久,后来考虑到可以用数组做递归
#include<stdio.h>
int main(){
int n,i;
double sum=0;
scanf("%d",&n);
double a[n];//分子
a[0]=2.0,a[1]=3.0;
double b[n];//分母
b[0]=1.0,b[1]=2.0;
for(i=2;i<n;i++){
a[i]=a[i-2]+a[i-1];
}
for(i=2;i<n;i++){
b[i]=b[i-2]+b[i-1];
}
for(i=0;i<n;i++){
sum=sum+a[i]/b[i];
}
printf("%.4f",sum);
}
//总结,可以用数组+循环来很好的解决递归的问题