版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
函数的递归制作:教材编写团队出版社:机械工业出版社《Python编程基础与应用》配套课件本课件为《Python编程基础与应用(第2版)》配套教学资源,由编写团队精心打造。为便于教学使用,团队同步提供了丰富的辅助材料,涵盖微课视频、教学课件、实训手册、习题答案、课程标准及程序源代码等。同时,教材配套超星教学示范包,支持一键克隆为网络在线课程,助力高效开展线上线下混合式教学。欢迎联系出版方订购使用。
书名:《Python编程基础与应用(第2版)》出版社:机械工业出版社主编:蓝永健、陈冬冬副主编:蔡德琛、朱海鑫、邓爱玲+contents目录递归函数的含义经典递归范例阅读角函数的递归01
什么叫递归函数?什么叫递归函数?简而言之,函数的递归就是在函数的定义中,函数内部的语句调用函数本身。举个例子,我们来计算非负整数的阶乘n!=1x2x3x...xn。简单分析一下:n!=1#当n=1n!=1x2=2#当n=2n!=1x2x3=6#当n=3n!=nx(n-1)!#当n>1时用函数f(n)表示,可以看出:f(n)=n!=1x2x3x...x(n-1)xn=(n-1)!xn=f(n-1)xn所以,f(n)可以表示为nxf(n-1),只有当n=1时需要特殊处理,其他情况就是n!=nx(n-1)!运算。
什么叫递归函数?递归函数是指在函数定义中直接或间接调用自身的函数。这是一种通过将问题分解为更小的同类子问题来解决问题的方法。核心特征:自调用性:在函数体内调用自身。基准条件(BaseCase):必须存在终止递归的条件。递推关系:每次调用都向基准条件推进范例:非负整数的阶乘n!#定义deffactorial(n):ifn==1:return1else:returnn*factorial(n-1)#调用foriin(range(1,10)):print(i,"!=",factorial(i))它的运行结果如下:1!=12!=23!=64!=245!=1206!=7207!=50408!=403209!=362880
递归函数的注意事项递归深度限制:Python默认递归深度约1000层(可通过sys.setrecursionlimit()修改)性能考虑:递归可能有额外的函数调用开销尾递归优化:Python不原生支持尾递归优化栈溢出风险:深度递归可能导致栈溢出
递归函数的适用场景问题具有自然递归结构(如树形结构遍历)子问题与原问题同构但规模更小代码可读性比极致性能更重要时
递归函数与循环的对比特性递归循环代码简洁性高中内存消耗较高(调用栈)低可读性问题自然表达时更优线性过程更清晰调试难度较高较低
经典递归范例02经典递归范例——阶乘计算
经典递归范例——阶乘计算
经典递归范例——斐波那契数列
经典递归范例——斐波那契数列
经典递归范例——数字各位求和
经典递归范例——数字各位求和
经典递归范例——列表元素求和
经典递归范例——列表元素求和
前面4个经典递归范例——总结
注:递归的简洁性以性能为代价(如斐波那契的指数级复杂度),实际开发中需权衡使用。阅读角03
汉诺塔问题汉诺塔问题就是递归问题的一个经典案例。汉诺塔问题源于印度一个古老传说。相传大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘,如图所示。问应该如何操作?
汉诺塔问题汉诺塔问题的解决思路:我们可以先假设除a柱最下面的盘子之外,已经成功地将a柱上面的63个盘子移到了b柱,这时我们只要再将最下面的盘子由a柱移动到c柱即可。当我们将最大的盘子由a柱移到c柱后,b柱上便是余下的63个盘子,a柱为空。因此现在的目标就变成了将这63个盘子由b柱移到c柱。这个问题和原来的问题完全一样,只是由a柱换为了b柱,规模由64变为了63。因此可以采用相同的方法,先将上面的62个盘子由b柱移到a柱,再将最下面的盘子移到c柱。
汉诺塔问题以此类推,再以b柱为辅助,将a柱上面的62个圆盘最上面的61个圆盘移动到b柱,并将最后一块圆盘移到c柱。我们已经发现规律,我们每次都是以a或b中一根柱子为辅助,然后先将除了最下面的圆盘之外的其他圆盘移动到辅助柱子上,再将最底下的圆盘移到c柱子上,不断重复此过程。这个反复移动圆盘的过程就是递归,例如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中历史 第12课 近代战争与西方文化的扩张教学设计 部编版选择性必修3
- 一年级下册科学教学设计-10.让纸张更结实-粤教版
- 高中物理 第六章 传感器 2 传感器的应用教案 新人教版选修3-2
- 西师大版五年级下册第三单元长方体正方体体积与体积单位教案
- 五年级英语下册 Unit 1 Welcome to our school Lesson 3教案 人教精通版(三起)
- 七年级英语下册 Unit 5 Why do you like pandas Section B 第5课时(3a-3b)教案 (新版)人教新目标版
- IATA DGR 第 67 版中文版 危险货物航空运输规则完整原文加解读
- 四年级下册科学教学设计-3.8《岩石、土壤和我们》教科版(含活动手册)
- 新疆乌鲁木齐市初中体育 第十六周《武术-手型步型》教学设计 新人教版
- 七年级历史下册 1 隋朝统一与隋唐更替教学设计 华东师大版
- 2026年济宁西城控股(集团)有限公司(第二批)公开招聘工作人员考试参考题库及答案详解
- 2026秋改版人教版三年级上册道德与法治全册教案
- 摩托车交通安全管理现状与规范培训
- 数据库应用与数据分析MySQL(第2版) 课件全套 项目1-8 数据库概述-MySQL数据处理与数据分析
- 2026年秋季开学传染病防控安全知识宣讲课件
- 2026年新疆高考物理真题试卷及参考答案
- 2026年重庆市中考数学真题试卷(真题+答案)
- 2026-2027学年第一学期高中物理学校工作计划
- 2026年北师大八下数学期末模拟卷(四川成都专用八下全册)
- 2026非洲食品冷链物流行业市场现状分析及冷链技术与食品安全保障研究报告
- 2026年绵阳市涪城区社区工作者招聘考试真题(附答案)
评论
0/150
提交评论