版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.2.2递归递归算法现在,我们把问题反过来思考f(5)=f(4)*5f(4)=f(3)*4f(3)=f(2)*3f(2)=f(1)*2f(1)=f(0)*1递推问题逐渐缩小回归大问题的解决中嵌套着与原问题相似的规模较小的问题。这种解决问题的方式在计算机科学中称为递归,通过函数自己调用自己来实现,即一个函数在其定义中直接或间接调用自身的一种方法。递归算法1.大问题能分解成结构相似且规模较少的问题,这些小问题的阶可以方便地构造出大问题的解;2.当递归到达某个边界时,当递归到达某个边界,如问题规模缩减为0或1时,能直接得解。这个边界被称为递归出口。·能采用递归算法解决的问题特征因此,在设计递归算法时,要满足两个条件:确定递归公式和递归结束条件。递归算法1(n=0)n*f(n-1)(n>0)f(n)5!=5*4!4!=4*3!3!=3*2!2!=2*1!1!=1*0!0!=1递推:分解问题回归:代值求解任务一:利用递归思想设计一个函数f,用来计算5的阶乘deff(n):ifn==0:___________else:
___________returnff=1f=n*f(n-1)算法时间复杂度为:O(n)递归算法递归程序的执行过程1.在递推阶段,把较复杂的问题的求解递推到一些简单问题的求解。必须要有终止递推的情况。2.在回归阶段,当获得最简单情况的解后,逐级返回依次得到稍复杂问题的解。递归算法1*fac(0)2*fac(1)3*fac(2)4*fac(3)5*fac(4)fac(1)fac(2)fac(3)fac(4)fac(5)通过不断的调用自己缩小问题规模,进而求解。空间复杂度大用栈实现递归:递归算法迭代:由旧值不断推出新值的过程。它包括三个方面:①确定迭代变量;②建立迭代关系式;③控制迭代过程,使程序能够停止下来。递归:是一种缩小问题规模,进而构造出整个问题解的思想方法。①递推
②回归迭代难点:建立正确的迭代公式,通常要借助循环语句。递归难点:思想比较难以理解,递归程序的效率相对不高。辨析迭代与递归:递归算法——汉诺塔游戏汉诺塔游戏汉诺塔游戏的装置是一块铜板,上面有三根针,其中最左侧一根针上放着从大到小的n个圆盘。游戏的目标是把所有的圆盘从最左侧一根针上移动到最右侧一根针上,中间一根针作为过渡。游戏规定每次只能移动一个圆盘,并且大盘子不能压在小盘子上面。递归算法——汉诺塔游戏汉诺塔游戏启始针A过渡针B目标针C一个盘子:二个盘子:三个盘子呢?n个盘子呢?将n-1个盘子从A柱经过C柱移动到B柱将A柱中剩下的一个盘子移动到C柱将n-1个盘子从B柱经过A柱移动到C柱n-1个看成一个整体A->C2号:A->B1号:A->C2号:B->C递归算法——汉诺塔游戏将n-1个盘子从A柱经过C柱移动到B柱将A柱中剩下的一个盘子移动到C柱将n-1个盘子从B柱经过A柱移动到C柱【设计算法】1.定义一个实现盘子移动的函数move。如将n个盘子从A柱经过B柱移动到C柱,可调用函数move(n,a,b,c),
其中,n表示A柱上的盘子个数,a、b、c分别表示A柱、B柱、C柱。2.当n=1时,直接移动盘子,递归结束。move(n-1,a,c,b)move(1,a,b,c)move(n-1,b,a,c)递归算法——汉诺塔游戏defmove(n,a,b,c):if____________:print(a,"--->",c)else:move(n-1,a,c,b)move(1,a,b,c)
____________a=int(input("请输入A柱盘子的个数:"))print(f"把{a}个盘子全部移动到C柱子的顺序为:")move(a,"A","B","C")n==1move(n-1,b,a,c)递归算法——进制转换编写程序,输入两个正整数x,y(y<=l6),实现将十进制数x转换为十六进制y输出。迭代程序defconvert(n,base):convert_s="0123456789ABCDEF"ans=""whilen>0:x=______________________________________n=n//basereturnansx=int(input("请输入x:"))y=int(input("请输入y:"))print(convert(x,y))n%baseans=convert_s[x]+ans递归算法——综合应用为了防止黑客恶意破解密码、机器恶意注册或刷票等不良行为,很多网络平台使用验证码作为一种通行方式。小明给自己的网站平台设计了如下验证码功能:首先计算机随机生成一个[1,100000]范围内的整数作为验证码,用户通过计算该整数各位数字的和并输入验证,只有验证通过才能正常登录。例如,若计算机产生的随机数为21304,则用户只有输入10(2+1+3+0+4=10)才能正常登录。递归算法——综合应用【算法分析】该验证码功能需要从随机数x中分解出各位数字并求和。由于随机数x的位数不确定,而任何整数x的个位数一定可以通过x%10得到,剩下的(x//10)可以采用递归算法进行分解。通过函数fenjie(x)先将x的各位数字分解并存入数组ans,再求得和sumx,最后将sumx与用户输入的信息进行比对,输出响应的提示信息,请完善以下代码。递归算法——综合应用importrandomdeffenjie(x):ifx<10:ans.append(x)else:ys=x%10____________fenjie(x)ans.append(ys)x=random.randint(1,100000)print("随机产生的整数为:",x)y=int(input("请输入你的运算结果:"))ans=[]fenjie(x)sumx=0foriinans:___________if_______________:print("验证通过!")else:print("输入错误!")x=x//10sumx+=isumx==y课堂小结递归的必要条件递归的适用情况递归的定义函数的递归调用是指一个函数在它的函数体内,直接或间接地调用它自身,称为递归调用。这种函数称为递归函数。确定递归条件寻找递归出口问题在规模小时能够直接得出答案可以通过同一套规则转化为比该问题更为简单的子问题。练一练1.递归算法的函数调用时,处理参数和返回地址通常使用的数据结构是()A.数组B.队列C.栈D.链表C练一练2.楼梯上有8级台阶,从下开始往上走,每次可以走一步或者两步,自定义函数fg可以计算走完n级台阶有多少种走法。实现对应功能的Python程序如下:deffg(n):ifn==1:return1elifn==2:return2e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《方正超线介绍》课件
- 班氏丝虫病病因介绍
- 《水泥车间工艺设计》课件
- 【大学课件】商业银行资本业务管理2
- 泌尿系统子宫内膜异位症病因介绍
- 《活性污泥法》课件
- 宁波国际汽车城工程钢结构部分施工组织设计方案
- 射频通信混频器教学课件
- 开题报告:以“构建受欢迎学校”为价值驱动的学校自我评估与发展研究
- 《货物运输实务》课件 7.2大件物品的运输组织
- 界桩安装合同范本
- 河南省重点高中2025届高考仿真模拟生物试卷含解析
- animate动画设计与制作智慧树知到期末考试答案章节答案2024年潍坊职业学院
- 测量工作总结范文2000字
- YYT 0663.3-2016 心血管植入物 血管内器械 第3部分:腔静脉滤器
- 监理投标文件范本
- 小学三年级上册道德与法治期末测试卷及答案(各地真题)
- 2024年高考语文二轮复习各地模考作文冲刺汇编(八)含范文
- 2024年烟花爆竹经营单位安全生产考试练习题(100题)含答案
- (高清版)JTT 617.4-2018 危险货物道路运输规则 第4部分:运输包装使用要求(第1号修改单)
- 2024春期国开电大本科《经济学(本)》在线形考(形考任务1至6)试题及答案
评论
0/150
提交评论