斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...这个数列从第三项开始,每一项都等于前两项之和。
下面将用递归算法和非递归算法分别实现,并求其时间与空间复杂度。
斐波那契递归算法
时间复杂度 O(2^N)
空间复杂度 O(N)
#include<iostream>
using namespace std;
int Fibonacci(size_t n)
{
if (n <= 2)
return 1;
else
{
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
int main()
{
cout << Fibonacci(24) << endl;
return 0;
}
//斐波那契非递归算法
//时间复杂度O(N)
//空间复杂度O(1)
#include<iostream>
using namespace std;
int Fibonacci(size_t n)
{
if (n <= 2)
{
return 1;
}
else
{
int fb1 = 1;
int fb2 = 1;
int fb3 = 0;
while (n>=3)
{
fb3 = fb1 + fb2;
fb1 = fb2;
fb2 = fb3;
--n;
}
return fb3;
}
}
int main()
{
cout << Fibonacci(24) << endl;
return 0;
}