动态规划入门:Fibonacci数列有关题目:HDU2041/HDU2044/HDU2046
斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)
Fibonacci数列解决方法:
(1):递推法
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n;
long long feibo[51];
feibo[1]=1;
feibo[2]=1;
for(int i=3;i<=50;i++)
feibo[i]=feibo[i-1]+feibo[i-2]; //打表
while(cin>>n)
cout<<feibo[n]<<endl;
return 0;
}
(2):递归法
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
long long data[51];
long long feibo(int n)
{
if(n==1||n==2)
return 1;
else
{
if(data[n]==0)
data[n]=feibo(n-2)+feibo(n-1); //数组打表,两递归相当于只计算一个大量节省时间
return data[n];
}
}
int main()
{
int n;
memset(data,0,sizeof(data));
data[1]=1;
data[2]=1;
while(cin>>n)
cout<<feibo(n)<<endl;
return 0;
}
总结:在运用递归过程中可以对数据进行打表处理,如上题中的data[n]=f(n-2)+f(n-1),运用递归,但对数据进行打表处理对数据结果进行了储存,在下次运行中可以直接读取而避免重复计算,大量节省了运行时间。新技能get√
本文介绍了动态规划入门,重点探讨斐波那契数列及其在HDU2041/2044/2046题目的应用。通过递推和递归方法阐述解决方案,并提出通过数据打表来优化递归计算,减少重复运算,提高效率。
1850

被折叠的 条评论
为什么被折叠?



