用数组+for循环解决递归问题

时间:2022-12-09 21:57:59

【描述】

有一个分数序列: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);

}
//总结,可以用数组+循环来很好的解决递归的问题