1、1、2、3、5、8、13、21、34、……
1.递归法:
缺点:重复计算的次数太多,效率低。时间复杂度:O(2^N)
#include<bits/stdc++.h>
using namespace std;
long long Fib(long long N)
{
if (N < 3)
return 1;
else
return Fib(N - 1) + Fib(N - 2);
}
int main()
{
long long num;
num=Fib(10);
cout<<num<<endl;;//结果是55
}
2.公式法:通项公式
#include <bits/stdc++.h>
using namespace std;
long long Fib(long long N)
{
return sqrt(5)/5*pow((sqrt(5)+1)/2,N)-sqrt(5)/5*pow((1-sqrt(5))/2,N);
}
int main()
{
long long num;
num=Fib(10);
cout<<num<<endl;//结果是55
}
3.循环法
算法的时间复杂度为O(n).
#include<iostream>
using namespace std;
long Fib(int n) {
if (n <= 2)
return 1;
else {
long num1 = 1;
long num2 = 1;
for (int i = 2;i < n - 1;i++) {
num2 = num1 + num2;
num1 = num2 - num1;
}
return num1 + num2;
}
}
int main()
{
long long num;
num=Fib(10);
cout<<num<<endl;//结果是55
}