C Fibonacci前n项和

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//Fibonacci非递归
int fibonnaci1(int n);//求某一项的值
int fibonnaci2(int n);//求某一项的值
long sumFi(int n);//求前n项的和

//递归法求前n项和 实际上是将结果都放在一个数组中  然后对该数组求和
int arr[20]={0,0,0,0,0};
long putToArrayFi2(int n);
long sumFi2(int n);

double fenmu[21];
double fenzi[21];
double sumME(int n);

int main() {
    printf("%d\n", fibonnaci2(5));
    printf("%d\n", fibonnaci1(5));
    printf("%ld\n",sumFi(5));//长整型数据 ld  记住是拉登
    printf("%d\n",putToArrayFi2(5));
    printf("%ld\n",sumFi2(5));

    //接下来求一个特殊数列
    //  2/1 + 3/2 + 5/3 + 8/5 + 13/8 ...
    //仔细观察 发现分子分母都是Fibonacci数列  一个从2 3开始  另一个从 1 2 开始
    printf("%lf",sumME(20));

    return 1;
}

int fibonnaci2(int n) {
    if (n == 1 || n == 2) {
        return 1;
    } else {
        return fibonnaci2(n - 1) + fibonnaci2(n - 2);
    }
}

int fibonnaci1(int n){
    int t1=1;
    int t2=1;
    int t3=0;
    int i=3;
    for(i=3;i<=n;i++){
        t3=t1+t2;
        t1=t2;
        t2=t3;
    }
    return t3;
}

//求前n项和的时候用非递归比较方便
long sumFi(int n){
    long sum=2;
    int t3=0;
    int t1=1;
    int t2=1;
    if(n==1){
        return 1;
    }else if(n==2){
        return 2;
    }

    int i=3;
    for(i=3;i<=n;i++){
        t3=t1+t2;//当前项是t3  他是前两项的和
        sum+=t3;
        t1=t2;//重新赋值前两项 为下一项求值做准备  //当然 我还可以把求出的每一项都放在数组中
        t2=t3;
    }
    return sum;
}


long putToArrayFi2(int n){
    if (n == 1 ) {
        arr[n]=1;
    } else if(n==2){
        arr[1]=1;
        arr[2]=1;

    }else {
        arr[n]=putToArrayFi2(n-1)+putToArrayFi2(n-2);
    }
    return arr[n];
}

long sumFi2(int n){
    long sum=0;
    int i=1;
    for(;i<=n;i++){
        sum=sum+arr[i];
    }
    return sum;
}

double sumME(int n){
    fenzi[1]=2;
    fenmu[1]=1;
    fenzi[2]=3;
    fenmu[2]=2;
    int i=3;
    for(;i<=n;i++){
        fenzi[i]=fenzi[i-1]+fenzi[i-2];
        fenmu[i]=fenmu[i-1]+fenmu[i-2];
    }

    double sum=0;

    for(i=1;i<=n;i++){
        //printf("--%lf--",fenzi[i]/fenmu[i]);
        sum+=fenzi[i]/fenmu[i];
    }
    return sum;

}
原文地址:https://www.cnblogs.com/cart55free99/p/2973198.html