斐波那契数列就是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]的值;