斐波那契数列(acwing)

c++

class Solution {
public:
    int Fibonacci(int n) {
        int a = 0, b = 1;
        while (n -- ) {
            int c = a + b;
            a = b, b = c;
        }
        return a;
    }
};
eclass Solution {
public:
    int Fibonacci(int n) {
        if(n==0) return 0;
        if(n==1) return 1;
        if(n==2) return 1;
        if(n==3) return 2;
        if(n==4) return 3;
        if(n==5) return 5;
        if(n==6) return 8;
        if(n==7) return 13;
        if(n==8) return 21;
        if(n==9) return 34;
        if(n==10) return 55;
        if(n==11) return 89;
        if(n==12) return 144;
        if(n==13) return 233;
        if(n==14) return 377;
        if(n==15) return 610;
        if(n==16) return 987;
        if(n==17) return 1597;
        if(n==18) return 2584;
        if(n==19) return 4184;
        if(n==20) return 6765;
        if(n==21) return 10946;
        if(n==22) return 17711;
        if(n==23) return 28657;
        if(n==24) return 46368;
        if(n==25) return 75025;
        if(n==26) return 121393;
        if(n==27) return 196418;
        if(n==28) return 317811;
        if(n==29) return 514229;
        if(n==30) return 832040;
        if(n==31) return 1346269;
        if(n==32) return 2178309;
        if(n==33) return 3524578;
        if(n==34) return 5702887;
        if(n==35) return 9227456;
        if(n==36) return 14930352;
        if(n==37) return 24157817;
        if(n==38) return 39088169;
        if(n==39) return 63245986;
    }
}; 
时间复杂度:O(1)!!!

递推法

class Solution {
public:
    int Fibonacci(int n) {
        if(n == 0)  return 0;
        if(n <= 2)  return 1;
        int a = 1, b = 1, c = 0;//a保存f(n-2),b保存f(n-1),c保存f(n)
        for(int i = 3; i <= n; ++i)//递推求出f(i)
        {
            c = (a + b) ;//f(n) = f(n - 1) + f(n - 2)
            a = b;//a保存b
            b = c;//b保存c
        }
        return c;
    }
};

(通项公式)

class Solution {
public:
    int Fibonacci(int n) {
        double t = sqrt (5) ;
        long long r =  (pow ((1 + t) / 2 , n) - pow ((1 - t) / 2 , n)) / t ;
        return r ;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值