zoukankan      html  css  js  c++  java
  • 斐波那契的四种求法

    首先看一下斐波那契的矩阵表示:

    数列的递推公式为:f(1)=1,f(2)=2,f(n)=f(n-1)+f(n-2)(n>=3)

       用矩阵表示为:

      进一步,可以得出直接推导公式:

    #include<iostream> 
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<queue> 
    #define N 1000
    using namespace std;
    
    int f[N]; 
    int fibonacci_1(int n){//递归
        if(n==1 || n==0) return 1;
        return fibonacci_1(n-1) + fibonacci_1(n-2);
    }
    
    int fibonacci_2(int n){//递推
        f[0] = f[1] = 1;
        for(int i=2; i<=n; ++i)
            f[i] = f[i-1] + f[i-2];
        return f[n];
    }
    
    int fibonacci_3(int n){//非递归
        int f1=1, f2=1, f3;
        for(int i=2; i<=n; ++i){
            f3 = f1+f2;
            f2 = f1;
            f1 = f3;
        }
        return f1;
    }
    
    struct Fibonacci{
        int a11, a12, a21, a22;
        Fibonacci(){
        }
        Fibonacci(int a1, int a2, int a3, int a4){
            a11 = a1;
            a22 = a2;
            a21 = a3;
            a22 = a4;
        }
        Fibonacci operator *(Fibonacci x){
            Fibonacci* tmp = new Fibonacci();
            tmp->a11 = a11*x.a11 + a21*x.a21;
            tmp->a12 = a11*x.a12 + a21*x.a22;
            tmp->a21 = a21*x.a11 + a22*x.a21;
            tmp->a22 = a21*x.a21 + a22*x.a22;
            return *tmp;
        }
    };
    
    int fibonacci_4(int n){//矩阵 + 快速幂方法
        Fibonacci a(1, 1, 1, 0);
        Fibonacci ans(1, 0, 0, 1);
        while(n){//快速幂方法 
            if(n&1) ans = ans*a;
            a=a*a;
            n>>=1;
        }
        return ans.a11;
    }
    int main(){
        int n;
        cin>>n;
        cout<<"fibonacci_1: "<<fibonacci_1(n)<<endl;
        cout<<"fibonacci_2: "<<fibonacci_2(n)<<endl;
        cout<<"fibonacci_3: "<<fibonacci_3(n)<<endl;
        cout<<"fibonacci_4: "<<fibonacci_4(n)<<endl;
        return 0;
    }
  • 相关阅读:
    jmeter jsr223脚本引用变量的问题
    apk反编译
    JS时间对像
    无缝滚动
    带详情图片轮播
    飘动文字2
    飘动的文字1
    抖动图片2
    点击图片图片上下抖动
    点击div掉下和上升
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/4808912.html
Copyright © 2011-2022 走看看