斐波那契数列

斐波那契数列就是f[n]=f[n-1]+f[n-2];

一般递归就可以了;

不过有人推出了公式:链接:https://www.nowcoder.com/questionTerminal/2393c500d43a4293aa7a662274aff4d1
来源:牛客网
以f(10)为例子找规律:f(10)=f(9)+f(8)=2f(8)+f(7)=3f(7)+2f(6)=5f(6) + 3f(5)=f(4)f(6)+f(3)f(5) ...
发现规律:F(n) = F(k)F(n-k) + F(k-1)F(n-k-1), k>=1
推导出如下公式:
F(2n) = F(n) F(n) + F(n-1) F(n-1), n>=1

F(2n+1) = F(n+1) F(n) + F(n) F(n-1), n>=1

#include<bits/stdc++.h>
using namespace std;
 int a[1000000]={};
int m=1;
class Fibonacci {
public:
    int getNthNumber(int n) {
        // write code here
        if(m==1)
        {
            n--;m=0;
        }
        if(n<2)
        {
            return 1;
        }
        else if(a[n]!=0){return a[n];}
        else if(n%2==1)
        {
                 a[n/2+1]=getNthNumber(n/2+1)%1000000007;
                 a[n/2]=getNthNumber(n/2)%1000000007;
                 a[n/2-1]=getNthNumber(n/2-1)%1000000007;
             a[n]=((((a[n/2+1]*a[n/2])%1000000007)+((a[n/2]*a[n/2-1])%1000000007))%1000000007);
             return a[n];
        }
        else
        {
            a[n/2]=getNthNumber(n/2)%1000000007;
                a[n/2-1]=getNthNumber(n/2-1)%1000000007;
            a[n]=((((a[n/2]*a[n/2])%1000000007)+((a[n/2-1]*a[n/2-1])%1000000007))%1000000007);
             return a[n];
        }
    }
};
    int main()
    {
        int n;
        while(cin>>n)
        {
            Fibonacci a;
            cout<<"_______"<<a.getNthNumber(n)<<endl;
            m=1;
        }
        return 0;
    }

还有就是矩阵快速幂求解:

a[][]={{1,1},{1,0}};的n次幂就是f[n]的值;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值