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

【描述】

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值