1.递归方法
//斐波那契数
#include <iostream>
using namespace std;
int F[1000];
long long FIB(int n)
{
if(n == 0) return 0;
if(n == 1) return 1;
else return FIB(n-1)+FIB(n-2);
}
int main(int argc, char *argv[])
{
int n; cin >> n;
long long a=FIB(n);
cout << a << endl;
cout << "Hello World!" << endl;
return 0;
}
2.自顶向下带备忘的动态规划法
//动态规划法 自顶向下带备忘
//斐波那契数
#include <iostream>
using namespace std;
long long F[1000];
long long FIB(int n)
{
if(n == 1 || n == 2) F[n] = 1;
if(F[n]>0) return F[n];
else
{
F[n]=FIB(n-1)+FIB(n-2);
}
}
int main(int argc, char *argv[])
{
int n; cin >> n;
long long a = FIB(n);
cout << a <<endl;
cout << "Hello World!" << endl;
return 0;
}
3.自底向上动态规划法
//动态规划法 自底向上
//斐波那契数
#include <iostream>
using namespace std;
long long F[1000];
long long FIB(int n)
{
F[1]=F[2]=1;
if(n == 1 || n == 2) return F[n];
for(int i=3;i<=n;i++)
{
F[i]=F[i-1]+F[i-2];
}
return F[n];
}
int main(int argc, char *argv[])
{
int n; cin >> n;
long long a=FIB(n);
cout << a << endl;
cout << "Hello World!" << endl;
return 0;
}