高中信息技术必修一4.3非数值计算教学设计_第1页
高中信息技术必修一4.3非数值计算教学设计_第2页
高中信息技术必修一4.3非数值计算教学设计_第3页
高中信息技术必修一4.3非数值计算教学设计_第4页
高中信息技术必修一4.3非数值计算教学设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

高中信息技术必修一4.3非数值计算教学设计一、教材分析与课标定位本课选自教科版(2019)高中信息技术必修一第四单元“计算与问题解决”第三节“非数值计算”。该单元前三节分别讲授了枚举法、解析法与二分查找等数值型算法思想,而本节内容则转向另一类经典问题——递归与分治策略。课标在“计算思维”维度要求学生“针对给定的任务进行分解、抽象、建模,并形成解决方案”,本节恰是将抽象思维落到具体代码与运行过程的关键节点。从教材编排看,4.3以“汉诺塔”与“斐波那契数列”为载体,引出递归的概念、三要素(边界条件、递归前进段、递归返回段)以及分治思想的初步体验。就学科大概念而言,本课归属于“算法与程序实现”这一核心脉络,是学生从“用程序解决问题”走向“理解算法本质”的桥梁。高一学生经过前三节学习,已掌握顺序、分支、循环结构,能编写简单迭代程序。但递归思维与日常线性思维差异巨大,学生普遍存在“知道定义但写不出代码”“能看懂但不明白栈的运作”等认知断层。因此,本设计将重点放在“可视化递归过程”与“抽象分层提炼”两条主线上,以认知冲突驱动建构,以代码实测验证猜想,最终达成对递归及分治思想的实质性理解。二、学情分析与教学重难点授课对象为高中一年级学生,已具备Python基础语法能力,能够独立阅读含函数定义的代码段。但是,他们对函数调用时变量的生命周期、内存栈帧的变化几乎无感知。在之前测试中,仅12%的学生能正确解释“函数内部再次调用自身”时参数的传递路径。此外,多数学生习惯“从前往后”执行的线性思维,遇到“先递进后回溯”的模式容易产生误解,甚至误以为程序进入死循环。基于上述分析,设定以下教学重难点:重点:递归的三要素;递归与迭代在解决同一问题时的差异。难点:递归调用过程中系统栈的工作机制;分治策略中“分”与“合”的边界。三、教学目标1.能用自己的语言描述递归的定义,并指出递归算法必须满足的边界条件。2.能画出给定递归程序的调用栈变化图,准确标注参数与返回位置。3.能利用递归编写汉诺塔移动步骤的Python程序,并验证结果正确性。4.通过对比递归与迭代求斐波那契数列第n项的时间差异,形成算法效率比较意识。5.体验分治思想在“折半查找”与“归并排序”中的体现,能举出生活与学习中的分治实例。以上目标中,目标2是核心,目标4是延伸。本教学设计力图让每位学生在一节课内至少达成目标1与目标3,学有余力者向目标5拓展。四、教学方法与媒体准备采用“问题链驱动+双任务并行”的教学策略。首先用一个现实情境引发认知冲突,继而通过拆解问题提炼递归模型,再用在线可视化工具演示栈帧变化,最后回归代码研读与上机验证。教学环境:计算机教室(每人一机),安装Python3.8及以上版本及IDLE或Thonny,安装turtle库(用于汉诺塔动画演示)。同时准备一份预制的“调用栈可视化”HTML5动画页面,无需联网即可运行。另备纸质学案一份,含三个递进练习与评价量表。五、教学过程(两课时连排,90分钟)第一环节情境导入:从“猜数游戏”到递归直觉(约10分钟)教师开讲:“今天我们先来做一个游戏。我心中默念一个1到100之间的整数,你每次猜一个数,我只告诉你‘大了’‘小了’还是‘对了’。如果你是计算机,你会怎么写这个程序?”学生立刻举手回应,多数能写出“用while循环+二分法”。教师继续追问:“如果规则变更——我不告诉你任何大小信息,只问你‘是否在左半边’,也不允许你使用循环,只允许你调用一个你正在编写的函数,你还能完成吗?”全班沉默片刻。此时教师出示一段有缺陷的递归代码:defguess(lo,hi):mid=(lo+hi)//2ans=input(f"数字在{lo}到{hi}之间吗?(是/否)")ifans=="是":returnguess(lo,mid)else:returnguess(mid+1,hi)学生很快发现:这个函数永远不会停止。教师顺势抛出本课核心问题:“为什么不会停?缺了什么?”由此引出递归的第一要素——边界条件。板书(电子白板)书写:递归=递进+回归+终止条件。设计意图:以学生熟悉但变形的问题制造认知冲突,迫使他们在“不能用循环”的约束下主动寻找新范式。该环节不追求完整代码,重在激发求知欲。第二环节概念建构:递归的数学表达与程序形态(约20分钟)教师给出阶乘的经典案例,并引导学生从数学定义转换为程序定义。数学上,n!=n×(n1)!,且0!=1。学生对照定义,自主补全下列代码:deffact(n):ifn==0:return1else:returnnfact(n1)教师组织同桌互助,完成学案上的“追踪表”。追踪表格式如下(每个小组一张):|调用序号|函数名(参数)|返回值计算过程|返回给谁|||||||1|fact(4)|4fact(3)|主程序||2|fact(3)|3fact(2)|fact(4)||3|fact(2)|2fact(1)|fact(3)||4|fact(1)|1fact(0)|fact(2)||5|fact(0)|1|fact(1)|填表后,教师请一位学生上台,用“便签纸叠罗汉”的方式模拟栈的变化。每调用一次函数,就往手上放一张纸,写有当前参数与下一行指令地址;每返回一次,就取走最上面的纸。五张纸依次放入又依次取出,学生直观看到“后进先出”的规律。随即将该体验迁移至Python为每个函数帧分配的“栈帧”概念。教师强调:“递归函数并不可怕,它只是让每次调用都保存现场,等最内层算完后,逐层带回结果。”随后展示错误示例(缺少边界条件的死循环),以及正确的对比(边界条件置于首行)。为了巩固,立即进行一个微型随测——完成fib(5)的追踪表,要求至少填出前三层。此环节结束时,学生应能口头归纳出递归三要素:边界条件、递归前进段、递归返回段。第三环节重点突破:汉诺塔——从三根柱子看递归之美(约30分钟)教师切换至PPT,展示三根柱子与三只圆盘的实物图。提出问题:“三只圆盘从A移到C,每次只能移动一只,且大盘不能压在小盘上,最少几步?”有学生尝试手算,得到7步。教师追问:“如果40只圆盘呢?你能写出移动步骤吗?”此时引入一段神奇代码:defhanoi(n,src,dst,aux):ifn==1:print(f"{src}>{dst}")else:hanoi(n1,src,aux,dst)print(f"{src}>{dst}")hanoi(n1,aux,dst,src)教师不急于讲解,而是让学生在电脑上运行n=3的情况,并对照屏幕输出与自己的手推步骤。当看到屏幕上打印出正确的7行指令时,不少学生发出惊叹。教师随即追问:“这段代码只有四行,为什么能解决40层问题?”学生陷入思索。教师引导进行“分而治之”的抽象:移动n只盘子,可以看作“先把上面n1只移到B柱,再把最大盘移到C柱,最后把B柱上n1只移到C柱”。而移动n1只盘子,又是同样的逻辑,只是目标柱和辅助柱互换。这种“自己调自己”并不断缩减规模的方式,正是递归的精髓。随后,教师打开预先制作的turtle动画程序,让n=4的移动过程以图形方式展示。每执行一层递归,画面上即出现一个新盘子的运动轨迹,同时右边的栈深度指示计升高一格。当最大盘完成移动时,栈深度下降到1。视觉反馈让学生清晰看到“递进”与“回归”的交织,多数学生在这一刻产生顿悟。紧接着,学生独立完成学案任务:修改n=5,在pycharm中运行,截图保存输出。同时回答下列问题:1.移动n只盘子需要多少步?写出递推公式。2.当n=64时,步数约为多少?如果有幸每秒移动一次,需要多少年?学生计算后得出2^n1的公式,以及约5849亿年的天文数字。教师点出:“这就是递归的‘指数爆炸’,也解释了为什么不是所有问题都适合用递归。”此处教师补充说明:汉诺塔除了演示递归,还蕴含分治策略——将大问题拆解为两个同型子问题加一步基础操作。这一思想在后续的快速排序、二叉查找中持续体现。第四环节难点化解:递归与迭代的较量(约20分钟)教师列举计算斐波那契数列第35项的两个程序。其一为递归写法,其二为迭代写法。学生先行阅读代码,猜测哪个更快。多数人认为递归更简洁因此更快。随后运行实测,计时结果令人意外:递归版本耗时约3.8秒,迭代版本仅0.00002秒,相差近19万倍。全班哗然。教师顺势引导分析:“为什么递归这么慢?”学生在学案上画出递归树,发现fib(3)被重复计算了数千次。教师指出,这是“重叠子问题”带来的冗余。结合高一数学中的数列知识,教师提出优化方案——增加缓存(memoization)。改造后的递归代码耗时骤降至微秒级,学生再次惊叹。教师总结:“递归迷人在于简洁,迭代高效在于循环复用。实际工程中,两者并非对立,而是可以相互转换。你们在今后的算法学习中,将接触更多关于时间复杂度的分析。”同时,教师板书对比表:|特性|递归|迭代||||||代码可读性|高,贴近数学定义|一般,需仔细构造||内存占用|高,每次调用压栈|低,仅需常数空间||执行速度|较慢(无优化时)|快||适用场景|问题天然分层嵌套|线性重复操作|为了深化理解,教师再举一个生活实例:俄罗斯套娃。打开一个娃娃,里面还有相同的小娃娃,直到最小的无法再打开。这就是“对象包含自身的更小拷贝”——递归的空间结构。而组装一个书架,一层一层固定隔板,则是迭代。第五环节动手实践:用递归解决实数问题(约25分钟)本环节提供三个分层任务,学生根据自身水平任选其一,也可依次完成:任务A(基础):编写递归函数,求一个非负整数的各位数字之和。例如输入1234,输出10。提示:每次取末位并缩小问题规模。任务B(进阶):用递归实现字符串反转。要求不借助切片与反转函数,仅使用递归逻辑。任务C(挑战):使用分治思想在有序列表中查找目标值。要求不得使用循环,请先用递归实现折半查找,再统计查找次数与列表长度的对数关系。学生上机操作时,教师巡视指导。重点观察两类问题:一是边界条件写错导致无限递归;二是忘记写return语句导致返回None。教师针对典型错误,随机抽取两位学生的代码投屏全班讨论,分析错误原因并修正。修正完成后,学生继续扩展:将任务C的折半查找改造为“三分查找”,即每次将区间划分为三段,思考递归分支数变化对性能的影响。这一延伸不要求写出完整程序,只要求口述思路,教师点评其逻辑严谨性。第六环节归纳升华:建立算法思维图谱(约10分钟)教师带领学生完成一张概念图,中心为“递归”,向外辐射出“三要素”“调用栈”“分治”“递归树”“与迭代的关系”等分支。学生合上学案,尝试在空白纸上绘制自己的思维导图。教师抽取三张展示,引导同学互评补充。随后教师提问:“今天学了递归,以后在编程中,你会在什么情况下主动选择递归?”学生回答各异:“树形结构遍历”“大整数乘法”“汉诺塔类移动问题”。教师汇总并补充:“实际上,在计算机科学中,凡是由自身定义的数据结构,如链表、树、图,其操作天然适配递归。你们即将在后续必修二‘数据结构与算法’中再次遇见它。”最后教师布置课后提升任务(供学有余力者选做):用递归实现一个简单的文件目录树遍历程序,在C盘或指定文件夹中运行,输出所有子文件夹名称。这道题与文件系统深度关联,学生需要自主思考如何用os模块构造遍历逻辑,体验递归在真实场景中的威力。六、教学评价设计本课采用过程性评价与终结性评价相结合的多元方式。过程性评价包括:课堂追踪表填写质量(权重30%)、编程任务完成度(权重40%)、小组互评与自我反思(权重10%)。终结性评价为课后在线测试,含6道客观题与2道编程题,覆盖递归边界、调用栈理解、递归转迭代等考点。具体评价量表如下:|评价维度|优秀(A)|合格(B)|待改进(C)|||||||递归三要素掌握|能独立阐明并正确应用边界条件、前进段、返回段|能说出名称,但程序编写时偶有遗漏|需在提示下才能指出边界条件||调用栈理解|能画出三层以上栈帧变化图|能画出一层栈帧变化|仅能口头描述“栈”的概念||程序调试能力|能自主定位并修复递归错误|能在同伴帮助下修复|无法独立完成修改||合作交流|主动分享思路并帮助他人|能参与讨论|被动接受帮助|课堂结束前五分钟,每位学生领取一张“反思卡”,填写三个问题:我今天最深刻的……;我还没弄懂的……;我希望继续探索的……。教师收集后作为下次课的备课依据。七、教学反思与改进预案本课设计遵循“从现象到抽象,从代码到思维”的路径,力求让学生不仅会写递归,

温馨提示

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

最新文档

评论

0/150

提交评论