前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >递归迭代动态规划「建议收藏」

递归迭代动态规划「建议收藏」

作者头像
全栈程序员站长
发布2022-11-17 17:01:02
发布2022-11-17 17:01:02
31200
代码可运行
举报
运行总次数:0
代码可运行

递归:程序调用自身,从顶部将问题分解,其问题与其子问题是同一概念。通过解决掉所有分解出来的小问题,来解决整个问题。

迭代:利用变量的原值推算出变量的下一个值。递归中一定有迭代,但是迭代中不一定有递归。

动态规划:通常与递归相反,其从底部开始解决问题。将所有小问题解决掉,进而解决的整个问题。为了节约重复求相同子问题的时间,引入一个数组,把所有子问题的解存于该数组中,动态规划算法是空间换时间的算法。

动态规划可以递归地实现,也可以非递归(循环的方法)地实现。

运行速度:动态规划 > 迭代 > 递归

二、递归

递归有两个特点:

1)函数自身调用自身;

2)使用递归时必须要有一个明确的出口;

递归分两个阶段:

1)递推:把复杂的问题推到比原问题简单的子问题的求解;

2)回归:当获取最简单的情况后,逐步返回,依次得到复杂问题的解;

代码语言:javascript
代码运行次数:0
运行
复制
int fibonacci(int n)
{
	if (n <= 2)
		return 1;
	else
		return fibonacci(n - 1) + fibonacci(n - 2);
}

Jetbrains全家桶1年46,售后保障稳定

三、迭代

由第一个数和第二个数去求解第三个数,由第二个数和第三个数去求解第四个数,以此类推。

代码语言:javascript
代码运行次数:0
运行
复制
int fibonacci(int n)
{
	if (n <= 2)
		return 1;
		
	int first = 1, second = 1, answer;
	for (int i = 3; i <= n; i++)
	{
		answer = first + second;
		first = second;
		second = answer;
	}
	
	return answer;
}

四、动态规划

子问题的解存储在一张表格里,这样每个子问题只用计算一次。但是需要额外的空间以节省时间。

代码语言:javascript
代码运行次数:0
运行
复制
int fibonacci(int n)
{
	vector <int> dp;
	dp.push_back(0);
	dp.push_back(1);
 
	for (int i = 3; i <= n; i++)
		dp.push_back(dp[i-1] + dp[i-2]);
 
	return dp[n];
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/222959.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、递归
  • 三、迭代
  • 四、动态规划
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档