第6周递归第2讲-递归算法的设计.pdf





《第6周递归第2讲-递归算法的设计.pdf》由会员分享,可在线阅读,更多相关《第6周递归第2讲-递归算法的设计.pdf(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、设计求解问题的递归模型。设计求解问题的递归模型。 转换转换成成对应对应的递归算法。的递归算法。 5.2.1 递归递归算法设计的步骤算法设计的步骤 递归算法递归算法 (1)对原问题对原问题f(s)进行分析进行分析,称为称为“大问题大问题”, 假设出合理的假设出合理的“小问题小问题”f(s) ; 求递归模型求递归模型的的步骤步骤 (3)确定一个特定情况(如)确定一个特定情况(如f(1)或或f(0))的的解解 递归出口递归出口。 (2)假设假设f(s)是可是可解解的的,在此在此基础上确定基础上确定f(s) 的解的解,即给出即给出f(s)与与f(s)之间之间的的关系关系 递归体递归体。 数学归纳法数学
2、归纳法 假设假设n=k- -1时等式时等式 成立,求证成立,求证n=k时时 等式成立等式成立 求证求证n=1时等式时等式 成立成立 例如例如,采用递归算法求实数数组采用递归算法求实数数组A0.n- -1中的最小值中的最小值。 假设假设f(A,i)求求数组元素数组元素A0Ai(i+1个元素个元素)中中的最小值的最小值。 f(A,i)=A0当当i=0时时 f(A,i)= MIN(f(A,i- -1),Ai) 其他情况其他情况 因此得到如下递归模型:因此得到如下递归模型: 假设假设f(A,i- -1)已求出已求出,则则f(A,i)=MIN(f(A,i- -1),Ai),其中其中MIN() 为求两个值
3、较小值函数为求两个值较小值函数。 A0 A1 Ai- -1 Ai An- -1 f(A,i):大问题,处理大问题,处理i+1个元素个元素 f(A,i- -1):小问题,处理小问题,处理i个元素个元素 当当i=0时,只有一个元素,有时,只有一个元素,有f(A,i)=A0。 float f(floatA,int i) float m; if (i=0) returnA0; else m=f(A,i-1); if (mAi) returnAi; else return m; 由此得到如下递归求解算法:由此得到如下递归求解算法: 递归出口递归出口 递归体递归体 递归数据结构的数据特别适合递归处理递归数
4、据结构的数据特别适合递归处理 递归递归算法算法 种瓜得瓜种瓜得瓜:递归性:递归性 5.2.2 基于递归基于递归数据结构的递归算法设计数据结构的递归算法设计 数据:数据:D=瓜的集合瓜的集合 运算:运算:Op=种瓜种瓜 递归性:递归性: Op(x D) D 【例例5- -1】设计设计不不带头节点的带头节点的单链表的相关递归单链表的相关递归算法。算法。 a1a2an . L f(L):大问题:大问题 f(L- -next):小问题:小问题 把“大问题”转化为若干个把“大问题”转化为若干个相似相似的“小问题”来求解。的“小问题”来求解。 为什么在这里设计为什么在这里设计单链表的递归算法时不单链表的递
5、归算法时不带头节点?带头节点? L- -next) 求求单链表中单链表中数据节点个数数据节点个数。 f(L)f(L- -next) a1a2 .Lan 设设f(L)为单链表中数据节点个数。为单链表中数据节点个数。 空单链表的数据节点个数为空单链表的数据节点个数为0f(L)=0当当L=NULL 对于非空单链表:对于非空单链表: =+ 1 递归模型如下:递归模型如下: f(L)=0当当L=NULL f(L)=f(L- -next)+1其他情况其他情况 求求单链表中单链表中数据节点个数递归算法如下:数据节点个数递归算法如下: int count(Node *L) if (L=NULL) return
6、 0; else return count(L-next)+1; 不带头节点单链表不带头节点单链表L 正向正向显示显示所有节点值所有节点值。 反向反向显示显示所有节点值所有节点值。 a1a2an.L f(L):大大问题,输出问题,输出a1,a2,an f(L- -next):小小问题,输出问题,输出a2,an 假设假设f(L- -next)已求解已求解 f(L) 输出输出L- -data; f(L- -next); 假设假设f(L- -next)已求解已求解 f(L) f(L- -next);输出输出L- -data; f(L):大大问题,输出问题,输出an,a2a1 f(L- -next):
7、小小问题,输出问题,输出an,a2 递归模型如下:递归模型如下: f(L) 不不做任何做任何事件事件 当当L=NULL f(L) 输出输出L-data;f(L-next) 其他其他情况情况 递归模型如下:递归模型如下: f(L) 不不做任何做任何事件事件 当当L=NULL f(L) f(L-next);输出输出L-data 其他其他情况情况 不带头节点单链表不带头节点单链表L 正向正向显示显示所有节点值所有节点值。反向反向显示显示所有节点值所有节点值。 void traverse(Node *L) if (L=NULL) return; printf(%d ,L-data); traverse
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 森林经营规划

限制150内