1.情景导入
你应该知道斐波那契数列吧!就是前两项之和等于这一项。如果你学过递归,你肯定会写这道题:输入一个N代表你要求的项数,然后输出斐波那契的第N项。这道题看似简单,实则也挺简单实则特别困难(对于大数据来说)。
下面是一段斐波纳契的代码:
#include <iostream>
using namespace std;
long long f(long long n) {
if (n < 3){
return 1;
}
return f(n-1)+f(n-2);
}
int main(){
long long n;
cin >> n;
cout << f(n);
return 0;
}
如果我们用C++运行这段代码,你会发现如果我们输入50,它就会加载很久。
肯定会超时!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(っ °Д °;)っ
所以今天我们要学习一种时间复杂度很低的方法!\( ̄︶ ̄*\))
2.导入概念
首先我会向你提出一个问题:是什么原因会导致递归速度这么慢?
如果我们按照计算机的方法去思考, 你会发现重复计算的地方太多了!
大家请看下图: