版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.2.2递归大问题的解决中嵌套着与原问题相似的规模较小的问题。这种解决问题的方式在计算机科学中称为递归,通过函数自己调用自己来实现,即一个函数在其定义中直接或间接调用自身的一种方法。递归的作用:
能使函数的定义和算法的描述简洁且易于理解,极大地减少程序代码量。能采用递归描述的算法通常有这样的特征:
为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解中方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,递归核心整体方法和局部方法是一致的。在设计递归算法时,要满足两个条件:确定递归公式和递归结束条件。例:利用递归算法求n的阶乘(n!=1*2*…*n)。由数学知识可知,n阶乘的递归定义为:它等于n乘以n-1的阶乘,即n!=n*(n-1)!,并且规定0!=1。设函数fac(n)=n!,则fac(n)可表示为:fac(n)=1(n=0)n*fac(n-1)(n>0)按照这个公式,可以将求n!的问题转化成求(n-1)!的问题;而求(n-1)!的问题,又可以转化成求(n-2)!的问题;求(n-2)!的问题,又可以转化成求(n-3)的问题,如此继续,直到最后转化成求0!的问题。再反过来,依次求出1!,2!,…,直到最后求出n!。因此,在该问题中,递归公式是fac(n)=n*fac(n-1),当n=0时递归结束。求n的阶乘的相应的程序及测试结果如下:deffac(n):ifn==0:s=1else:s=n*fac(n-1)returnsprint(fac(3))当主程序执行函数fac(3)时,引起第1次函数调用,进入函数后,参数n=3,应执行计算3*fac(2)。直到计算fac(0),将引起对函数fac的第4次调用。以上调用的执行和返回情况,如下图所示。fac(3)3*fac(2)第1次调用第2次调用2*fac(1)第3次调用1*fac(0)第4次调用1递归调用过程返回值1返回值1返回值2返回值6递推回归对于阶乘问题,可以在原程序上通过添加一条语句来跟踪参数n的变化情况:deffac(n):ifn==0:s=1else:print(str(n)+‘*fac(‘+str(n-1)+’)’)s=n*fac(n-1)returnsprint(fac(3))3*fac(2)2*fac(1)1*fac(0)6例.斐波那契数列是这样一个数列:1,1,2,3,5,8,13,21,34,…,其定义如下:f(n)=f(n-1)+f(n-2)(n>=2)编程求f(n)的值,请分别用迭代和递归算法实现,并分析这两种算法的时间复杂度。迭代程序递归程序n=int(input("请输入正整数:"))a=b=1foriinrange(3,n+1):______________________________print(c)
deffib(n):ifn<1:
________elifn==1:
__________else:
_________________n=int(input("请输入正整数:"))print(fib(n))c=a+ba=bb=creturn0return1returnfib(n-1)+fib(n-2)时间复杂度为O(n)fib(5)fib(3)fib(4)fib(3)fib(2)fib(2)fib(1)fib(1)fib(1)fib(1)fib(0)fib(2)fib(1)fib(0)fib(1)fib(5)递归调用的二叉树表示递归调用次数即为二叉树的节点个数(深度为n的二叉树最多有_____个节点),即时间复杂度为______。O(2n)2n-1例.楼梯上有8级台阶,从下开始往上走,每次可以走一步或者两步,自定义函数fg可以计算走完n级台阶有多少种走法。实现对应功能的Python程序如下:deffg(n):ifn==1:return1elifn==2:return2else:returnfg(n-1)+fg(n-2)Print(‘走完8级台阶的方法共有’,fg(8),‘种’)则走完这8级台阶的走法有()A.34种B.35种C.36种D.37种A利用迭代和递归思想解决问题时有何区别?算法实现时两者有哪些优缺点?迭代的思想,是一种由旧值不断推出新值的过程。它包括三个方面:一、确定迭代变量;二、建立迭代关系式;三、控制迭代过程,使程序能够停止下来。递归思想,是一种把数据规模较大、较复杂的问题分解成规模较小的问题,进而构造出整个问题解的思想方法。递归算法的执行过程分__________两个阶段,其中的关键是如何建立递归关系式与控制程序停止。一般而言,迭代思想实现的难点在于建立正确的__________,通常要借助循环语句。而递归思想比较难以理解,程序编写简洁,但递归程序的效率_______________。递推和回归迭代公式相对不高例.递归算法的函数调用时,处理参数和返回地址通常使用的数据结构是()A.数组B.队列C.栈D.链表C汉诺塔游戏1.抽象与建模选择IDLE中的Help菜单——TurtleDemo——Minimal_Hanoi为了将n个盘子从A柱经过B柱移动到C柱,可建立如下模型:将n-1个盘子从A柱经过C柱移动到B柱将A柱中剩下的一个盘子移动到C柱将n-1个盘子从B柱经过A柱移动到C柱汉诺塔游戏2.设计算法(1)定义一个实现盘子移动的函数move。如将n个盘子从A柱经过B柱移动到C柱,可调用函数move(n,a,b,c),其中,n表示A柱上的盘子个数,a、b、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 烟台理工学院《软件工程概论》2022-2023学年第一学期期末试卷
- 个人素质提升与职业发展的关系计划
- 许昌学院《图像处理基础》2021-2022学年第一学期期末试卷
- 四年级数学(上)计算题专项练习及答案汇编
- 四年级数学(三位数乘两位数)计算题专项练习及答案
- 二年级数学计算题专项练习1000题汇编集锦
- 医疗收费透明化与患者信息沟通计划
- 落实核心素养在幼儿园教育中的应用计划
- 音乐学校租赁合同三篇
- 幼儿园多媒体教学的有效应用计划
- 旧小区楼院改造申请书
- 苏教版小学六年级信息技术全册教案
- 网页设计与制作课程考核方案
- 家校共育工作考核细则
- 科研伦理与学术规范期末
- 集团管控一体化信息化平台建设方案
- 2023年广东省人民检察院招考聘用劳动合同制司法辅助人员40人笔试历年难易错点考题荟萃附带答案详解
- 高中生物选择性必修1(综合测试卷)(有解析)-2023-2024学年高二上学期生物选择性必修1人教版2023
- 输血专业知识考试题库(含各题型)
- 小学教师《道德与法治》课程标准考试试卷(附答案)
- 小学体育-短距离跑教学设计学情分析教材分析课后反思
评论
0/150
提交评论