




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章递归1递归不仅是数学中的一个重要概念,也是计算技术中重要概念之一。在人们的思维过程中,普遍存在着递归现象和递归机制。对于某些问题,只能用递归方法来处理;对于某些问题,用递归方法处理比其他方法更有效。数据结构中树的定义,树和图的遍历等问题是用递归来解决的。2xn=x*x*…*x*x(n个x连乘)
xn=xn-1*xS(n)=1+2+3+…+(n-1)+n(n个自然数连加)
S(n)=S(n-1)+n优点:直观、有效
3第六章递归6.1递归的定义6.2基本递归过程6.3递归过程实现与堆栈6.4递归法求解问题6.5递归的效率4什么是递归定义:如果一个对象部分地包含它自己,或者利用自己定义自己的方式来定义或描述,则称这个对象是递归的;如果一个过程直接或间接地调用自己,则称这个过程是一个递归过程。组成:递归调用、递归终止条件(递归出口)556以下三种情况适于用递归求解问题:问题的定义是递归的;问题所涉及的数据结构是递归的;问题的解法满足递归的性质。71、问题的定义是递归的幂函数、阶乘函数和斐波那契数列。[例]阶乘函数的定义8斐波那契数列Fib(n)的定义求解斐波那契数列的递归算法longFib(longn){
if(n<=1)returnn; //递归终止条件
elsereturnFib(n-1)+Fib(n-2);//递归调用}
9求解阶乘函数的递归过程longFactorial(longn){ if(n==0)return1;//递归终止条件 elsereturnn*Factorial(n-1);}
//递归调用102、问题所涉及的数据结构是递归的[例]
单链表head=NULL头指针为head的单链表的递归定义:(1)head指向一个空结点的数据结构是一个单链表;(2)head指向一个非空结点,该结点的指针域指向一个单链表,这样的数据结构是一个单链表。7245…head36∧11在头指针为p的单链表中搜索data值为item的结点
template<classT>
voidSearch(Node<T>*p,Titem)
{if
(p==NULL)
{cerr<<“Cannotfindtheitem.”;return;}
if(p->data==item)
Dealwith(p);//对结点进行一定的处理
else
Search(p->next,item);}12
二叉树:二叉树是数据元素的有穷集合,它或者为空集(空二叉树),或者由一个根元素和其下的两棵互不相交的二叉树(左子树和右子树)构成。 133、问题的解法满足递归的性质
对于一个比较复杂的问题,可以把它分解为若干个相对简单、且解法相同或类似的子问题,当这些子问题获得解决时,原问题就得以解决。 子问题无需分解就可以直接解决时,停止分解,直接求解该子问题。例如,二分法找最大最小元素、汉诺塔问题、n皇后问题等。14汉诺塔(TowerofHanoi)问题
19世纪末,布拉玛神庙(TempleofBramah)里的传教士玩着一种游戏,游戏装置有一块铜板,上有三根金刚石针,针上放有64个直径大小不等金盘。游戏的目标是把左面针上的金盘移动到右面的针上,移动过程中一次只能移动一个盘子,不允许大盘放在小盘上面,只能借助于中间的针。他们认为这种游戏的结束就意味着世界末日的到来。欧洲人把这种游戏叫做汉诺塔(TowerofHanoi)游戏。假如每秒钟一次,移完这些金片需要5845亿年以上。1516
递归算法的正确性证明
递归方法的理论基础是数学归纳法,递归算法的正确性可以用数学归纳法来证明。递归出口↔归纳基础递归调用↔归纳步骤17第六章递归6.1递归的定义6.2基本递归过程6.3递归过程实现与堆栈6.4递归法求解问题6.5递归的效率18递归过程的调用分为外部调用和内部调用。
main()f(n)f(n-1)f(1)f(0)…调用返回调用点
PnPn-1Pn-2P019为保证递归调用正确,要解决参数传递和返回地址问题,系统使用“递归工作栈”来解决。
调用时执行入栈操作保存现场,返回时执行出栈操作恢复现场。
现场(工作记录):20例
long
Factorial(
long
n){if(n==0)return1;else
return
n*Factorial(n-1);
RetLoc2 }
voidmain(){
intResult;
Result=
Factorial(4);RetLoc1
}21计算Factorial时活动记录的内容22求解4!的过程23第六章递归6.1递归的定义6.2基本递归过程6.3递归过程实现与堆栈6.4递归法求解问题6.5递归的效率24递归过程的实现与堆栈实现递归的系统工作栈由系统管理;也可自己设计基于栈的非递归程序。堆栈常用的操作:1)CREATS(S):建立一个堆栈S;2)S
x:元素x进栈;3)x
S:元素x出栈;4)StackEmpty(S):若S为空,返回1.25例计算数组A中最大最小元素的算法BS
算法BS(A,i,j.fmax
,fmin)//在数组A的第i个元素到第j个元素之间寻找最大和最小元素,已知ij。BS1[递归出口]IFi=jTHEN(fmax←fmin←A[i].RETURN.)IFi=j1THEN
(IFA[i]<A[j]THEN(fmax←A[j].fmin←A[i].) ELSE(fmax←A[i].fmin←A[j].)RETURN).26BS2[取中值]
mid←BS3[递归调用]
BS(A,i,mid.gmax,gmin).
BS(A,mid+1,j.hmax,hmin).BS4[合并]
fmax←max{gmax,hmax}. fmin←min{gmin,hmin}.■27子过程调用、子过程完成的先后顺序恰好是子过程进栈、出栈的顺序。28
例:汉诺塔游戏
一块铜板上有三根金刚石柱,柱上放有N个大小不等的金盘。目标是把左面柱上的金盘移动到右面柱上,移动过程中一次只能移动一个盘子,不允许大盘放在小盘上面,只能借助中间柱。29递归算法的思想:1.以C柱为临时柱,从A柱将1至N-1号盘移至B柱。2.将A柱中剩下的第N号盘移至C柱。3.以A柱为临时柱,从B柱将1至N-1号盘移至C柱。
30算法HR(n,i,j,k)//把原柱i上的n个圆盘移到目标柱k上,圆柱j是中间柱HR1[递归出口]IFn=1THEN(MOVE(i,k).RETURN.)
HR2[递归调用]HR(n-1,i,k,j).MOVE(i,k).
HR(n-1,j,i,k).▌31例如HR(3,A,B,C),递归算法的执行过程及结果如下:A→CA→BC→BA→CB→AB→CA→C32基于堆栈的非递归算法堆栈元素为四元组(n,i,j,k)HR(n-l,i,k,j)MOVE(i,k)=>HR(1,i,j,k)HR(n-l,j,i,k)
S(n-1,j,i,k).S(1,i,j,k).S(n-1,i,k,j).
33Hanoi塔的非递归算法,m是柱上圆盘个数算法HI(m)HI1[建立堆栈]CREATS(S).HI2[堆栈初始化]S(m,A,B,C).HI3[利用栈实现递归]WHILENOT(StackEmpty(S))DO
((n,i,j,k)S.
IFn=1THENMOVE(i,k).
ELSE(S(n-1,j,i,k).S(1,i,j,k).
S(n-1,i,k,j).)
▌34例如Hi(3),递归算法的执行过程及结果如下:A→CA→BC→BA→CB→AB→CA→C35第六章递归6.1递归的定义6.2基本递归过程6.3递归过程实现与堆栈6.4递归法求解问题6.5递归的效率36 递归方法在解决某些问题时是最直观、最方便的方法,但却不是高效的方法,原因在于递归方法过于频繁的函数调用和参数传递。 在这种情况下,若采用迭代或递归算法的非递归实现,将大大提高算法的效率。
37调用次数O(2k)斐波那契数列的递归调用树38计算斐波那契数列的非递归函数longCalFib(longn){ if(n<=1)
returnn; else { lo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临时补贴发放管理办法
- 互助资金管理办法实施
- 会计规范走账管理办法
- 乡村路边植树管理办法
- 企业公共澡堂管理办法
- 乡村旅游与文旅融合:2025年旅游与乡村振兴旅游与乡村振兴市场拓展报告
- 创新教育与技术的结合激发教学活力-基于设计思维的探索
- 大数据助力教育领域精细化管理与决策
- 腹膜透析护理科普宣教
- 化学元素与人体健康-九年级化学人教版(2024)下册
- 浙江省丽水市普通高中2024-2025学年高二上学期期末教学质量监控日语试卷(PDF版含答案不含音频和听力原文)
- 2025至2030电子海图行业产业运行态势及投资规划深度研究报告
- 小程序公司推广活动方案
- 公交车消防课件
- 厂家促销活动以旧换新活动方案
- 2025年湖北省中考英语试题(附答案)
- 2025中国系统性红斑狼疮诊疗指南解读课件
- 成人重症患者颅内压增高防控护理专家共识
- 2025年网络安全与信息保护基础知识考试题及答案
- 2025至2030中国城市轨道交通供电系统行业发展趋势分析与未来投资战略咨询研究报告
- 2025年江苏省南京市鼓楼区中考一模英语试卷(含答案)
评论
0/150
提交评论