版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lishang6257/article/details/79670990
先在这里占个坑,周末在补,代码先贴上去
1.动态规划基本描述
2.Fibonacci数列
3.问题分析
4.问题求解
5.递归,迭代对比
6.代码实现
#include <iostream>
#include <vector>
using namespace std;
//递归
int fibonacci1(int n){
if( n == 1 || n == 2 ) {
return 1;
}else {
return fibonacci1(n - 1) + fibonacci1( n - 2 );
cout << fibonacci1(n - 1) + fibonacci1( n - 2 ) << " ";
}
}
//非递归(迭代)
int fibonacci2(int n){
if(n == 1 || n == 2) return 1;
int next = 0,pre = 1,now = 1;
for(int i = 3;i <= n;i ++) {
next = pre + now;
pre = now;
now = next;
}
return next;
}
//动态规划
int fibonacci3(int n,int a[50]){
//这里只求前50
a[0] = 1;a[1] = 1;
if(n == 1 || n == 2) return a[n -1];
return (a[n-2] == 0 ? fibonacci3(n - 1,a) : a[n-2]) + (a[n-3] == 0 ? fibonacci3(n - 2,a) : a[n-3]) ;
}
int main()
{
int a[50];
for(int i = 0;i < 50;i ++) a[i] = 0;
int i = 10;
cout << fibonacci3(i,a) << " " << fibonacci2(i) << " " << fibonacci1(i);
return 0;
}