高中信息技术选择性必修一《数据与数据结构》3.3递归法与问题解决教学设计_第1页
高中信息技术选择性必修一《数据与数据结构》3.3递归法与问题解决教学设计_第2页
高中信息技术选择性必修一《数据与数据结构》3.3递归法与问题解决教学设计_第3页
高中信息技术选择性必修一《数据与数据结构》3.3递归法与问题解决教学设计_第4页
高中信息技术选择性必修一《数据与数据结构》3.3递归法与问题解决教学设计_第5页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高中信息技术选择性必修一《数据与数据结构》3.3递归法与问题解决教学设计一、教学背景与教材分析本课选自中图版高中信息技术选择性必修一《数据与数据结构》第三章第三节"递归法与问题解决"。本节内容处于"程序设计基础"向"算法与数据结构"过渡的关键节点,前承程序的控制结构与函数定义,后启栈、树、图等非线性结构的遍历与操作,是整册教材算法思想的制高点。递归既是一种算法设计策略,也是一种认知世界的方式。课标在本模块中明确要求学生"能够运用递归思想分析和解决实际问题,理解递归程序的执行过程"。从学科育人价值看,递归训练的不仅是编码技巧,更是"将大问题化归为小问题"的计算思维核心能力,这种化归思想与数学归纳法、分治策略一脉相承,是学生后续学习排序算法、动态规划乃至人工智能课程的思维基石。教材以汉诺塔、阶乘等经典问题为载体展开递归思想的教学,但教材呈现偏向结论性知识,学生若只读懂代码而不理解"函数为何能调用自己",递归就只是被背诵的语法现象而非思维工具。本课的教学设计着力点正在于此:把递归的"执行现场"可视化、可感化,让学生在思维冲突中建构概念。二、学情分析授课对象为高二年级选考信息技术的学生,已完成必修模块学习,掌握Python基本语法、函数定义与调用、循环结构,能独立编写百行以内的程序。学生此前在"斐波那契数列""最大公约数"等练习中已隐约接触过"自己算自己"的念头,但缺乏系统的概念框架。从认知难点看,递归对高二学生有三重障碍。其一,直觉障碍:日常经验中"A依赖A"意味着循环定义,是逻辑错误,学生本能排斥函数自我调用。其二,过程障碍:递归调用在内存中的层层压栈与逐层回归是看不见的,学生难以想象执行轨迹。其三,设计障碍:即便看懂了别人的递归代码,面对新问题时仍不知如何"拆解"出递归结构。基于上述判断,本课确定的教学策略是:用生活情境消解直觉障碍,用可视化手段化解过程障碍,用"递推关系+边界条件"的思维模板突破设计障碍。三、教学目标知识与理解:理解递归的概念,能准确说出递归的两个必要条件——递推关系(递归体)与终止条件(基准情形);理解递归调用过程中栈的作用,能手工推演简单递归程序的执行过程与返回值。过程与方法:经历"问题情境—寻找子问题—建立递推关系—确定边界—编码验证—跟踪调试"的完整探究流程,初步形成用递归思想分析问题的思维路径;能通过对比递归与迭代的实现方案,从代码简洁性、时间开销、空间开销三个维度评价算法。情感态度与价值观:在汉诺塔等经典问题的求解中体验"以简驭繁"的算法之美,感受化归思想的力量;在调试栈溢出错误的过程中养成严谨求证、直面失败的科学态度;通过递归在文件目录遍历、分形艺术、人工智能搜索中的应用,体会算法思想对技术世界的深层塑造。四、教学重难点教学重点:递归概念的理解;递推关系与终止条件的识别与设计;递归程序执行过程的追踪。教学难点:递归思维的建立——面对陌生问题时能主动将其分解为"规模减一的同类子问题";对递归调用栈工作机制的理解。突破策略:以"电影院数排数"生活情境引入递推思想,以"俄罗斯套娃"实物类比调用与回归过程,以在线Python可视化单步执行工具呈现调用栈动态变化,以"两问模板"(这个问题和更小规模的同类问题有什么关系?最小的情况答案是什么?)固化递归设计方法。五、教学准备硬件环境:网络机房,每生一机,安装Python3.x及IDLE开发环境,教师机配备广播教学软件。软件资源:递归可视化网页(pythontutor类在线执行可视化工具)、汉诺塔交互演示动画、本课学习任务单(纸质,含问题记录区与执行过程填表区)。素材准备:俄罗斯套娃实物或图片、阶梯教室照片、本课分层练习题组(必做3题、选做2题)。六、教学过程(一)情境导入:一个"偷懒"的数数方法(约6分钟)上课伊始,教师投影一张阶梯教室照片,提出问题:"你坐在最后一排,想知道教室一共有多少排座位。规定你不能回头数,只能问前面一排的同学。你会怎么得到答案?"学生七嘴八舌。教师请一名学生描述思路:问前排同学"你前面有几排",他若不知道就继续往前问,直到第一排的同学可以直接说出"我前面是0排",然后每排同学在前排答案上加一,逐排传回,最后一排就得到了总数。教师板书这组问答链条,并追问:"这个办法妙在哪里?"引导学生发现:每个人做的事完全一样——问前排、等答案、加一;问题在传递中越来越小;第一排是那个"不用问别人就知道答案"的特殊存在。教师点题:"这种'把问题交给一个更小的自己'的方法,在程序设计中叫作递归。今天我们就来研究,函数如何像这些同学一样,调用'自己'解决问题。"设计意图:用身体可感的场景把抽象的"自我调用"转化为自然的协作行为,预先埋下递归三要素——相同动作(递推)、问题缩小(规模递减)、特殊的人(终止条件),为概念建构搭好脚手架。(二)概念建构:递归是什么(约10分钟)教师展示俄罗斯套娃实物,边打开边提问:"打开这个动作要重复多少次?什么时候停?"学生答:一层层开,开到最小的实心的那个就停。教师总结:递归有两个缺一不可的条件。其一,递推关系——每一步都做相同的事,且问题规模在变小;其二,终止条件——存在一个最小情形,可以直接得到答案,不再继续。缺少前者,问题无法分解;缺少后者,过程永不停止。回到代码世界。教师广播演示求阶乘的递归函数:defjiecheng(n):ifn==1:return1else:returnnjiecheng(n1)教师指着代码逐行提问,师生共同对应概念:"哪一行是终止条件?哪一行体现了递推关系?jiecheng(5)在返回之前,需要先等到谁的结果?"学生发现,"n乘jiecheng(n−1)"正是"我这一排等于前排答案加一"的函数版表达。教师顺势给出递归的定义性表述:一个函数在其定义体内直接或间接调用自身,且每次调用使问题规模趋近于边界,这样的算法设计方法称为递归法。随后进行一分钟辨析快答。教师投出三段代码片段,学生举牌判断是否为合法递归:一段缺少终止条件,一段问题规模没有缩小(调用jiecheng(n)自身),一段完整正确。前两段的错误正是初学递归最高发的两类"事故",在概念建立之初就予以曝光。设计意图:从生活模型到代码模型经历两次抽象,定义由学生"共同说出"而非教师宣读;正误辨析紧接概念给出,防止学生形成"自我调用即递归"的片面理解。(三)过程透视:递归到底怎么跑(约12分钟)这是本课的思维攻坚环节。学生在任务单上完成第一项任务:手工推演jiecheng(4)的完整执行过程,填写"调用—等待—返回"表格。多数学生能写出向下拆解的链条:jiecheng(4)等jiecheng(3),jiecheng(3)等jiecheng(2),jiecheng(2)等jiecheng(1),但在"如何回填结果"上出现分歧。教师不急于评判,而是打开在线可视化工具,以jiecheng(4)为例单步执行。大屏幕右侧的动态栈帧区逐层长出四个函数帧,每帧里n的值、当前停留行、局部返回值清晰可见;触底后,帧自上而下依次弹出,返回值1、2、6、24依次向上传递。教室里响起"哦——"的声音,抽象的"调用与回归"第一次变得可见。教师结合画面讲解栈的作用:每发生一次函数调用,系统就在内存中为该次调用开辟一块独立空间,保存局部变量与"回来后从哪行继续"的位置信息,这些空间像叠盘子一样先进后出,称为调用栈。套娃一层层打开是"递",一层层合上带回答案是"归",一开一合之间,栈完成了记录与释放。教师随即制造认知冲突:"我们把终止条件删掉,再运行会怎样?"学生预测后现场验证,程序报出递归深度超限错误。教师引导解读报错信息,并抛出讨论:"如果阶乘的n取一万,会发生同样的问题。递归如此'费内存',为什么还要用它?"学生带着这个悬念进入下一环节。设计意图:先手工推演暴露迷思,再可视化验证,符合"预测—观察—解释"的科学探究顺序;故意触发栈溢出错误,把错误转化为理解调用栈的最佳教材,同时埋下递归与迭代对比的伏笔。(四)经典挑战:汉诺塔问题(约15分钟)教师播放汉诺塔动画:三根柱子,A柱上套着从大到小若干圆盘,要求借助B柱全部移到C柱,每次只能移动一盘,且大盘不得压小盘。先请两名学生上台用实体道具操作3个盘子,最快七次完成;再问"4个盘子要几步?64个呢?"学生面露难色。教师引导全班用刚学的"两问模板"拆解。第一问:移动n个盘子和移动n−1个盘子有什么关系?小组讨论三分钟后,有小组给出关键洞察:把上面n−1个盘子整体看作"一大块",问题就变成三步——先把n−1个盘子从A借C移到B,再把最大的盘子从A直接移到C,最后把n−1个盘子从B借A移到C。这三个步骤里,头尾两步正是"规模减一的同类问题"。第二问:最小情形是什么?学生答:只有1个盘子时,直接移动即可。师生共同把口头策略翻译为代码:defhanoi(n,a,b,c):ifn==1:print(a,">",c)else:hanoi(n1,a,c,b)print(a,">",c)hanoi(n1,b,a,c)运行验证:n为3时输出7步,与手工操作完全一致;n为4时输出15步。教师提问步数规律,学生归纳出2的n次方减1,进而计算64个盘子需要约1844亿亿步——若每秒移动一盘,需要五千多亿年。学生在震撼中体会到:几行递归代码描述的竟是一个宇宙尺度的过程,递归的表达力正在于"程序的长度与问题的规模无关"。教师强调这段代码的一个细节:三个参数a、b、c在两次递归调用中角色互换,"源柱、辅助柱、目标柱"是相对的,这正是递归分解的精巧之处。请学生在任务单上用自己的话注释这三行代码,同桌互查。设计意图:汉诺塔是递归思想最璀璨的标本,其难点不在代码而在"敢不敢把n−1个盘子托付给递归"。通过实体操作、小组拆解、代码转译、规律归纳四个台阶,让学生亲历"想到"的全过程而非被告知;天文数字的对比则把算法之美推向情感层面。(五)对比辨析:递归与迭代(约7分钟)教师布置任务:用循环方式改写阶乘与斐波那契数列,与递归版本并排展示,从三个维度对比。学生填写对比表后交流,形成结论:代码表达上,递归更贴近问题的数学定义,简洁优雅;空间开销上,递归因调用栈逐层占用内存,迭代通常只需常数空间;时间开销上,朴素递归若存在大量重复子问题(如斐波那契)会急剧变慢,而迭代可线性求解。教师补充提升:递归与迭代并非对立,许多递归可以改写为迭代,编译器和解释器内部正是用栈模拟递归。选择的标准是"问题本身的结构"——当问题天然具有自相似结构,如目录树的遍历、快速排序的分区、二叉树的访问,递归是思想与代码的最短路径;当问题只是简单的重复累加,迭代往往更节省资源。能判断"何时该用递归",才算真正学会了递归。设计意图:避免学生形成"递归高级、循环低级"的误解,建立基于证据的算法评价观;同时呼应前面栈溢出的悬念,形成认知闭环。(六)分层练习与课堂小结(约8分钟)分层练习,学生自主选题,教师巡视个别辅导。必做题:用递归求1到n的和;用递归实现字符串反转;阅读一段递归代码并写出其输出结果。选做题:用递归判断一个字符串是否为回文;查阅资料了解递归在绘制分形图形(如科赫雪花)中的应用,下节课分享。课堂小结采用"学生主讲、教师补台"的方式。教师只给三个提示词:两个条件、一个栈、一句话。学生集体回顾:递归需要递推关系与终止条件;递归的执行依靠调用栈完成递下与回归;一句话概括递归精神——相信你的函数能解决更小的问题,你只需处理好"这一层"。教师最后把这句话书写在黑板中央:"递归是一种信任:信任子问题会被正确解决,因此复杂可以被层层化解。"设计意图:分层练习尊重差异,选做题打通课内外并连接后续学习内容;小结由学生产出,三个提示词分别对应知识、机制、思想三个层面,完成从"学会知识"到"提炼思想"的升华。七、板书设计主板书区:左列写"递归=递推关系+终止条件",配阶梯教室问答链简图;中列写汉诺塔三步分解与核心代码框架;右列写递归与迭代三维对比要点。副板书区:保留调用栈"开出四帧、逐帧弹出"的示意手绘图,供整节课随时回指。八、作业设计基础作业:完成练习册本节习题,用递归实现十进制转二进制的打印输出。实践作业:在自己电脑上用递归函数统计某个文件夹(含多级子文件夹)中的文件总数,截图提交代码与运行结果,并用三句话说明:终止条件是什么?递推关系是什么?为什么这个问题用循环几乎无法优雅解决?探究作业:了解"尾递归"概念,思考把阶乘改写为尾递归形式需要做哪些调整,下节课课前三分钟交流。九、教学评价设计过程性评价嵌入三个观测点:手工推演表格的完成质量,反映对执行过程的理解;汉诺塔小组拆解的发言质量,反映递归设计思维的萌发;分层练习的正确率与选题层级,反映迁移能力。三个观测点分别对应"看得懂、想得到、做得出"的能力阶梯。表现性评价依托实践作业展开,评价量规设四个维度:递归要素完整性、代码正确性、解释表达的准确性、对递归适用场景

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论