内容正文:
5.3 运用典型算法(第四课时)(教案)
课 题
5.3 运用典型算法(第四课时)
课型
新授课
主备人
集体备课时间
课时安排
教授人
授课班级
授课时间
教学目标
1. 知识与技能
· 理解递归算法的基本概念:递归是函数自己调用自己的编程技巧
· 掌握递归算法的两大组成要素——递推阶段(规模逐层减小)和回归阶段(结果逐层回传),以及终止条件(防止无限递归)
· 能用递归思想解决阶乘计算等数学问题,并对比递归与循环的实现差异
· 巩固排序和查找算法的函数封装与调用,能将多种算法整合到一个程序框架中
2. 过程与方法
· 通过“俄罗斯套娃”等生活化和类比型情境,感知递归“自己包含自己”的核心特征
· 通过“递归与循环代码对比表”和“函数调用追踪表”,在逐行对比和逐格追踪中理解递归的执行逻辑和内存调用过程
· 通过“校园手机使用调查——数据分析综合平台”项目实战,将排序、查找、递归等多项技能整合为一个完整的程序系统
· 通过小组合作探究,培养算法思维、代码调试和团队协作能力
3. 情感态度与价值观
· 感受算法思想的多样性和创造力——“同一个计算问题,不同算法思路给出不同解题路径”
· 在算法选择中建立基于数据特征选择策略的意识——“没有最好的算法,只有最合适的算法”
· 了解CCF算法能力大赛(CACC)等前沿赛事,感受算法学习的职业发展前景
· 在综合项目完成中体验“自己能独立开发出完整数据处理系统”的成就感和职业信心
教学重点
· 递归算法的核心概念:函数自己调用自己,递推阶段+回归阶段,终止条件
· 递归的Python代码实现:以阶乘计算为教学范例
· 排序、查找算法的综合应用——将多种算法逻辑封装为函数模块,搭建统一的调用入口
教学难点
· 递归的执行逻辑:函数为什么能“自己调用自己”?计算机是如何记住并层层返回的?
· 递归与循环的本质差异:什么场景适合用递归解决,什么场景更适合用循环实现?
· 从“单一算法练习”到“多算法协同调用”的系统化能力跃迁
学习策略
类比体验法、任务驱动法、对比分析法、代码追踪法、演示法、小组合作探究法
设计理念与创新点
1. 综合项目系统化驱动:以“开发校园手机使用习惯调查数据分析综合平台”为核心项目,由一张“算法技能地图”(排序→查找→综合)层层引入。学生将5.3.1排序算法和5.3.2查找算法的已有成果作为系统中的独立模块整合至统一的交互式入口,在此过程中自然引入递归算法作为第三种程序设计工具,最终实现排序、查找、递归三大算法族系在同一平台下的并列应用与对比分析
2. 采用“感—拆—写—拓”四步递进教学链:感算法(观察排序-查找-递归三类代码的视觉差异→建立类别感知)→拆逻辑(利用类比法和追踪表突破递归“自身调用”认知障碍→理解递推与回归内存模型)→写代码(综合实战:打通5.2选择/循环/函数基础技能与5.3排序/查找/递归全链条→各组系统开发验收)→拓视野(了解AI算法、AI结对编程、CCF算法大赛等行业趋势→建立编程职业架构认知),让教学过程从感知到分析到编码到拓展层层递进
3. 多层级类比突破递归认知难点:通过“斐波那契数列生兔子”的等待问题引发对递归思维的初始兴趣,使用“俄罗斯套娃”比喻和函数调用追踪表将抽象的“自身调用”过程可视化呈现,辅以标准递归与忘记终止条件的无限递归的对比演示,逐步突破递归执行逻辑的核心认知障碍
4. 对比表格法突破“递归vs循环”区分难点:设计“递归与循环代码对比表”,将同一阶乘问题用递归和循环两种方式编写,逐行对应展示调用入口、核心运算逻辑、递推与迭代更新的差异以及各自终止机制,让学生在同一问题的两种解题策略下直观理解各自背后的控制模型
教学过程
教学内容
教师活动
学生活动
设计意图
情境唤醒
展示一个俄罗斯套娃实物或图片:“大家看这个套娃——打开最大的那个,里面还有一个小的;再打开这个小的,里面还有一个更小的。最小的那个打开后什么都没有了。如果我用一句话描述这个套娃——‘套娃里面还有套娃,直到最小的那个停止’——这像不像一个规则?”
观察套娃结构,理解“大里嵌套小”和“最小处停止”两层特征
以套娃的“自身嵌套”结构引出递归概念——函数内部调用自己形成“逻辑嵌套”,最小处停止对应“终止条件”
明确任务
分发任务书:“今天我们要完成三道工序——①认识递归算法,理解‘自己调用自己’的执行原理;②用递归写一个阶乘计算程序,并对比递归和循环的差异;③把排序、查找和递归整合到一个综合平台中,完成第5单元的收官战。”展示学习目标
查看任务书,明确三道工序
以项目综合任务驱动全课,让学生对本课流程心中有数
递归概念与生活类比
讲解递归的基本定义:“递归是函数自己调用自己的编程技巧——一个函数在执行的过程中直接或间接地调用了这个函数自身。”用“解套娃”的过程做比喻:“想打开最里面那个套娃——你打开最外面一层→发现里面还有一个→打开这个→发现还有→继续……直到碰到一个足够小的、里面不再有娃了——这时你获得了最终答案”。
深化理解:“斐波那契数列就是在模拟生兔子的过程——第一月1对兔子没成熟,第二月1对兔子依然没成熟,第三月开始成熟的兔子生出1对新兔子→第n个月的兔子对数,由第n-1个月和n-2个月各自已有兔子的对数决定——一个更复杂场景中的自我问题拆分”
进一步用教材拓展模块中的“斐波那契数列”
递归两大阶段讲解
聚焦两个关键模型:“递归的执行被拆分为两个阶段——①递推阶段:复杂问题→逐层分解为更小规模的同类型子问题,每一层的规模不断缩小,直到子问题的规模足够小到可以直接解决——这个阶段函数持续调用自己。②回归阶段:从最小子问题的结果开始,逐层向上回传并依次计算出各层的结果,最终回到最初的调用处得到最终答案。”:“你把一句‘我喜欢写Python程序’的句子存在电脑里,但如果递归的递推走到一半发现某个字母丢失了,整句话就会在读取途中因为无法衔接而中断,递归也是同样——任何一层代码的调用关系被破坏,整条回归链条就将断裂。”
板书画出阶乘的递推和回归流程图。
类比递推函数调用的分层与终端的差异
递归与循环对比表
发放任务书上的“递归与循环代码对比表”,将阶乘问题的两种实现方案写入表内——左侧循环版(for i in range(1, n+1): result *= i)、右侧递归版(def factorial(n): if n==1: return 1; return n * factorial(n-1))。从八个维度并列比对——“①初始准备;②核心运算逻辑;③重复执行机制的差异(迭代更新 vs 自身调用);④终止条件(条件不满足时退出 vs 满足条件时停止调用);⑤内存模型(循环的简单叠加 vs 递归的多层栈帧);⑥代码可读性(直观简洁 vs 需要抽象理解);⑦性能差异(循环更高效且几乎无额外层追加 vs 递归存在较深的栈帧层数);⑧适用场景(已知固定次数/重复性任务 vs 问题自然具有嵌套结构且每层子结构与原问题相同)。”
完成任务书
逐项讲解并板书关键对比点,重点区分第五项内存模型差异——循环在同一个函数栈内反复迭代更新变量值,递归则在多层调用栈中为每一层开辟独立的参数空间——完成后再逐层收缩返回结果
任务一:递归代码追踪深度训练——“填一填”
追踪任务发布 布置两道深度追踪任务:“①写出factorial(5)的完整递推和回归过程并填写追踪表;②完成一道拓展题——定义一个递归函数power(base, exp)计算base的exp次方(公式: base^exp = base * base^(exp-1),终止条件: exp=1时返回base),写出递推关系和终止条件并在终端运行验证。”巡视各组追踪表填写和拓展题运行情况 快速分享 随机抽查两组口头分享拓展题power(3, 3)的推算结果,教师公布标准答案 核对答案 即时反馈
小组交替完成两项任务——一人负责填写追踪表,另一人负责编写和运行power( )函数,完成后交互核对结果 拓展递归在幂运算中的应用
加强对递推关系和终止条件的熟练运用
任务二:算法整合初探——“连一连”
整合任务发布 发放“综合平台程序结构设计单”,布置初步整合任务:“请各小组为‘手机使用习惯数据分析综合平台’搭建程序骨架——平台内置三列原始时长数据,提供四个功能入口(直接输出排序结果、查找特定时长索引位置、计算全年级平均时长、生成综合报告)。各组分工编写各自分配的入口函数(内部调用已有的排序/查找/递归模块),最后完成主菜单和交互入口逻辑的串联。”巡视各组的代码结构和注释规范
各组明确各成员的分工后着手函数封装、主菜单搭建和调试拼接,逐步组装出可运行的平台雏形
打通5.2函数封装基础与5.3算法技能,实现从函数单元到综合数据流的第一次接口联动
成果展示
选取2—3个小组代表上台投屏展示:①综合平台完整代码(含排序/查找/递归/统计四大模块);②递归代码追踪表填写结果与运行验证的一致性;③“手动与AI递归代码对比”记录表的核心结论;④平台开发过程中解决的一个最关键的bug修复分享(绝大多数组会选择“递归终止条件”或“模块间参数传递”作为典型修复案例)
小组代表展示并讲解,其他小组认真倾听并评分
锻炼表达与展示能力,促进组间经验交流和知识互补
多元评价
组织自评、互评,教师进行点评总结。重点评价:①递归函数的终止条件是否正确设置;②综合平台各模块之间的调用关系是否清晰;③多算法整合的完整性和功能性;④“手动与AI对比”分析的深度与客观性。表扬平台功能完整、递归逻辑正确且对比分析有独立见解的小组,纠正共性问题——“递归未设置终止条件导致RecursionError”“模块间接口参数名不一致导致调用失败”等
进行自我评价和小组互评,填写评价记录
构建多维评价体系
板书设计
板书设计:5.3.4 运用典型算法
一、认识递归——“自己调用自己”
· 函数自己调用自己的编程技巧
· 递推阶段(规模缩小)+ 回归阶段(结果回传)
· 终止条件(防止无限递归)
· 范例:def factorial(n): if n == 1: return 1; return n * factorial(n-1)
二、递归 vs 循环——“同一个问题,不同的武器”
· 循环:在同一函数体内重复迭代(for i in range(...))
· 递归:函数不断调用自身(return n * factorial(n-1))
· 循环=简单高效的顺序反复|递归=嵌套结构的清晰拆分
三、算法全景图——“第5单元算法技能三种武器”
· 排序算法:冒泡/选择(相邻比较-一趟一趟排出最低值到最大值)
· 查找算法:顺序/二分(逐一比对提高/数据有序→逐步缩半)
· 递归算法:分解嵌套、从大拆小(递推+回归+终止)
四、综合平台——“排序+查找+递归=数据分析平台”
教学反思
(课后填写)
· 教学目标达成度分析
· 学生对信息技术发展历程的理解情况
· 小组讨论环节的参与度和效果
· 课程思政融入的自然度
· 改进措施与建议
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$