递归和动态规划的区别
递归与动态规划的区别
- 递归是从上而下(从大问题到小问题),而动态规划是由下而上(先解决小问题最后到大问题);
- 动态规划会储存每个小问题的结果,从而它的计算速度会比递归要快。(代价是动态规划的空间复杂度更高,即用空间换取的时间)。
斐波那契数列。
在数学上,斐波那契数列以如下被以递推的方法定义:
F(1)=1,F(2)=1, F(n)=F(n - 1) F(n - 2)(n ≥ 3,n ∈ N*),
即:新的一项等于前两项之和 1、1、2、3、5、8、13、21、34…
下面让我们来求第n项的斐波那契数列的值,这是一个经典的递归和动态规划问题
递归:
public static long fibonacci(long number) {
if ((number == 0) || (number == 1))
return number;
else
return fibonacci(number - 1) fibonacci(number - 2);
}
可以看出,递归是将大n由上而下,逐渐拆解成2的n次方个小问题,这样的缺点就是,有些值会重复计算。如下图所示,2和1标红代表递归结束。
动态规划:
public static long fibonacci(long number) {
if(number==0||number==1){
return 1;
}
int[] nums=new int[number];
nums[0]=1;
nums[1]=1;
for(int i-2;i<n;i ){
nums[i]=nums[i-1] nums[i-2];
}
return nums[number];
}
动态规划与递归的最大不同就是它 创建了一个数组(空间),来储存后面可能要用到的所有值,这样,就可以避免重复运算的过程,因为后面要用到的值都可以直接来数组里取。还有一点不同就是,它是从前往后进行运算的。
总结:
- 递归是由上而下, 动态规划是从下而上;
- 递归有重复计算,动态规划的运算速度更快(空间换时间)。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfikifj
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01