zoukankan      html  css  js  c++  java
  • 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;
    
    }
  • 相关阅读:
    Python 用SMTP发送邮件
    Python 用IMAP接收邮件
    E-mail Composition and Decoding
    用Python实现gmail邮箱服务,实现两个邮箱之间的绑定(中)
    【日志】-2013.10.31
    21本计算机数学相关的免费电子书【转】
    WordPress搭建Personal Blog【转】
    一句话点亮你的人生
    【日志】-2013.10.28
    转载-smarty教程(基本语法)
  • 原文地址:https://www.cnblogs.com/cart55free99/p/2973198.html
Copyright © 2011-2022 走看看