斐波那契数列定义
F(0)=1,F(1)=1,F(n)=F(n-1)+F(n-2)
求F(n)
解法1:递归
#include <iostream>
using namespace std;
int fib(int n)
{
if(n==0)
return 0;
if(n==1)
return 1;
return fib(n-1)+fib(n-2);
}
int main()
{
cout<<fib(40)<<endl;
return 0;
}
时间复杂度:O(2^n) ,是一个指数级的时间复杂度
那么现在我们来看下如何优化这个算法。
计算F(5)的过程如下:
可以看出,在这棵递归树上,我们进行了多次重复的计算。比如fib(3)计算了2次,fib(2)计算了3次
那么就会有一个想法,对于重复的计算