*递推
用数学公式可解
#include
using namespace std;
int fib[25];//求斐波拉契数列的第20项
int main()
{
fib[1]=fib[2]=1;
for(int i=3;i<=20;i++)
fib[i]=fib[i-1]+fib[i-2];
cout<
*记忆化+递归
1.为什么单纯的递归比递推时间复杂度很高呢
想一个函数递归调用的树,有些分支之前计算过,但是调用的时候就又算了一遍,所以我们最好存下之前算过的
2.是怎么想到记忆化和递归的算法呢
就来源于原始的暴力搜索/暴力枚举
3.代码
#include
#include
using namespace std;
const int N=1010;//浅求前1009个数吧
int data[N],n;//存斐波拉契数,初始值是0,表示没存过
int fib(int n)
{
if(n==1||n==2)
{
data[n]=1;
return 1;
}
if(data[n]!=0) return data[n];
data[n]=fib(n-1)+fib(n-2);
return data[n];
}
int main()
{
cin>>n;
cout<
*单纯的递归
#include
#include
using namespace std;
const int N=1010;//浅求前1009个数吧
//int data[N];//存斐波拉契数,初始值是0,表示没存过
int n;
int fib(int n)
{
if(n==1||n==2)
{
// data[n]=1;
return 1;
}
// if(data[n]!=0) return data[n];
// data[n]=fib(n-1)+fib(n-2);
// return data[n];
return fib(n-1)+fib(n-2);
}
int main()
{
cin>>n;
cout<
我写的时候犯了个小错误(这是个什么鬼w(゚Д゚)w)
fib(n)=fib(n-1)+fib(n-2);
return fib(n);
在返回值时调用自身!