NOI2019 夏令营课程报名中!
摘要
之前我们已经发布过(点击标题即可查看):
算法专题(1)-信息学基本解题流程!
算法专题(2)-模拟
算法专题(3)-枚举
四、 递归与递推
概述:
递归与递推是一些复杂算法的基础,其数据元素之间的关系可以用抽象的、严格的公式表达出来。递归与递推都具有边界条件,不同的是,递归从具体问题出发,一步步简化到边界条件;递推是从边界条件出发,一步步计算出具体问题。
1.知识点梳理:
Ø 递归
递归,将具体问题用一些类似的子问题描述,最后用一定的边界条件进行约束。递归一般用函数自调用实线,当然,也可以用栈模拟函数调用来完成。递归是实现许多重要算法的基础。深度优先搜索、记忆化搜索、分治算法和输出动态规划的中间过程等都需要用递归实现。
Ø 递推
递推指利用其数据的前一项或几项,通过递推关系式来求出当前项的解。递推与递归不同,递推一般用循环语句完成,需要记录一定的中间结果。递推适合解决可用递推式计算的数学题,以及大部分动态规划题。
Ø 递归与递推的相关性
递推与递归之间也可以相互转化。当递归深度太深时,可尝试用递推解决。当递推顺序不明显的情况下,可利用递归和记忆化搜索的方式解决。递归结构清晰、可读性强、目的性强,但容易函数栈溢出或超时;递推速度较快、比较灵活,但有时思路不易想到。
2.重难点分析:
递归算法在实现的过程中,要特别注意边界条件。没有边界条件会引发无限递归,从而导致程序崩溃。
递归算法深度过深时,应考虑用栈来模拟函数调用,避免系统栈溢出。
递归算法在执行过程中,应适当保留其中间结果,防止重复调用。
递推算法在执行过程中,其中间结果可能过多,应删去在之后递推中不会被用到的结果。
3.例题解析:
例题4-1:汉诺塔问题
【问题描述】已知有三根针分别用1、2、3表示。在一号针中从小到大放n个盘子,现要求把所有的盘子从1针全部移到3针。移动规则是:使用2针作为过渡针,每次只移动一块盘子,且每根针上不能出现大盘压小盘,找出移动次数最小的方案。
【分析】这是一个经典的递归问题。
递归的思路:如果想把n个盘子放到3针上,就应该先把n-1个盘子放到2针上。然后把1针最底部的盘子移动到3针,再把2针上的n-1个盘子移动到3针上。转移方程如下:
例题4-2:斐波那契数列
【问题描述】已知斐波那契数列公式如下,求斐波那契数列第n项的值。
【分析】斐波那契数列是一个经典的递推问题。建立一个长度为n的数组,从小到大枚举递推即可。当然,此问题也可以用递归来解,但必须用记忆化搜索。
当n值过大时,(例如n≤1010),直接递推求解无法完成,在“数学方法”章节会具体讲述。
例题4-3:过河卒(NOIP2002初中组)
【问题描述】如图,A点有一个过河卒,需要走到目标B点。卒行走规则:可以向下、或者向右。同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点。例如上图C点上的马可以控制9个点(图中的P1, P2, … , P8和C)。卒不能通过对方马的控制点。
棋盘用坐标表示,A点(0,0)、B点(n,m) (n≤20,m≤20),马的位置坐标是C,现在要求你计算出卒从A点能够到达B点的路径的条数。
【分析】此题是一道非常老的题目,在很多书上也有类似的题目。此题盲目用搜索或者递归会超时。对本题稍加分析,卒的行走规律为可以向下或者向右走,当一个点被走过后,它不会再被走到。因此,可以递推进行,创建与棋盘同大小的数组,保存该点的可行方案数。我们用保存(i,j)点的可行方案数,保存(i,j)点是否被马控制,如果被控制,值为1,不被控制,值为0。递推公式如下:
往期精选内容
(点击标题即可查看)
NOI2019 夏令营课程报名中!
2019年NOI省队选拔规定及NOI2019名额分配方案发布!
信息学竞赛入选!2019年度面向中小学生全国性竞赛活动名单公示
关于举办第34届全国青少年科技创新大赛的通知
最详细解析低分进名校三大途径:自主招生、综合评价、高校专项计划!
2018年自主招生高校对信息学奖项报考要求及优惠政策参考!报考时要注意哪些问题?
2019年保送生资格名单公示
NOIP2018复赛提高组各省中学 获一等奖人数排行榜及分析!
NOIP2018复赛提高组各省各中学获奖总数排行榜
NOIP2018各省各中学复赛普及组获奖总数分析!
CCF NOI2019冬令营报到通知及冬令营名额分配方案!
再见,OI-大牛HZW亲笔,分享OI生涯记录,不变的是坚持和热爱!
NOIP复赛知识点简述及复赛算法总结!
重磅!NOIP2018初赛普及组提高组真题及答案发布
NOIP2018提高组试题解析
根据信息学竞赛之路带你了解信息学竞赛流程
清华“姚班”2018级名单-看50名学霸到底多牛,同学们又如何能进姚班?
全国自主招生高校对各项学科竞赛奖项要求大汇总!签约路径
教育部出台高中新课标,信息学竞赛相关内容被编入必修课程!
北京大学自主招生初审通过1719人名单公布,看清华北大更青睐哪些省市中学?
IOI 2018国际信息学奥林匹克竞赛中国代表队选拔结果揭晓,看大牛们的竞赛之路!2018年五大学科竞赛国家队名单全部出炉,各省中学大比拼!
从搜狗CEO王小川(信息学金牌),看这二十几年中国奥赛金牌的去向
揭晓高薪专业排行榜,计算机专业薪资最高!哪些专业最具潜力?
2018中国大学排行榜出炉,北大清华连续11年蝉联冠亚军
一个清华保送生妈妈对竞赛的感受,自主招生家长都要看看!
计算机科学与技术专业全国大学排行榜!
为什么这些孩子初中就能被清华北大签约
2018五大学科竞赛国家集训队成员及所在学校名单
(1) 为什么有“编程思维”和数学能力强的人更优秀?(2)清北独家录制NOIP成功者说学习视频!!!
(3)我们为什么要对孩子进行编程教育?
(4)信息学竞赛答家长问题
1.信息学竞赛,你想了解的知识都在这里
2.信息学奥赛(NOIP)初赛学习方法推荐
3.信息学奥赛(NOIP)复赛学习方法推荐
4.大牛为你推荐十本最适合信息学竞赛的书籍
5.信息学奥赛有那么重要吗?
6.参加编程竞赛对实际工作的用处
7.清北学堂独家录制NOIP考试技巧讲座
8.在线编程挑战赛第一名:我是这么学算法的
9.信息学竞赛如何学习及准备攻略!
10.凭什么我得了信息学奥赛国家一等奖
11.榜样 | 北大降200分要这个诸暨天才少年
12.OI金牌教练胡芳:爱和成长的故事
13.信息学竞赛,一个让孩子不需要再去挤独木桥的方向
14.新学期必须了解的学科竞赛与自主招生时间!
15.北大录取生陈代超:在信息学中找到“思维图谱”
16.国务院发文支持编程教育进入中小学,中国人工智能厚积薄发
(1)NOIP报名,申诉,查成绩方式介绍
(2)NOIP复赛考前需要注意的那些事儿!!!
(3)NOIP测评环境,数据提交你都了解吗?请注意这些问题!
(4)关于NOI系列赛编程语言使用限制的规定
关注「信息学竞赛」
看更多信息学趣闻与知识
↓↓↓