斐波那契数列问题是,a0=0,a1=1,an=an-1+an-2
传统的,我们用函数递归来解这个问题,但是我们发现,大量的项被重复计算,那么自然的我们想用一种方法来记忆已经算出的项,这种方法叫做记忆化递归
传统递归
#include<iostream>
using namespace std;
int Feb(int n) {
if (n == 0 || n == 1) {
return n;
}
else
return Feb(n - 1) + Feb(n - 2);
}
int main()
{
int n=0;
cin >> n;
int p=Feb(n);
cout << p;
return 0;
}
记忆化递归
#include<iostream>
using namespace std;
int n;
int A[101];//假设项数不超过101
int Feb(int n) {
if (n == 1 || n == 2)
{
A[n] = 1;
return 1;
}
if (A[n] != 0)
{
return A[n];
}
else
{
A[n] = Feb(n - 1) + Feb(n - 2);
cout << A[n];
return A[n];
}
}
int main() {
cin >> n;
Feb(n);
}
记忆化递归的基本思想是空间换时间