高中信息技术选修1《算法与程序设计》递归算法与递归程序教学设计_第1页
高中信息技术选修1《算法与程序设计》递归算法与递归程序教学设计_第2页
高中信息技术选修1《算法与程序设计》递归算法与递归程序教学设计_第3页
高中信息技术选修1《算法与程序设计》递归算法与递归程序教学设计_第4页
高中信息技术选修1《算法与程序设计》递归算法与递归程序教学设计_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

高中信息技术选修1《算法与程序设计》递归算法与递归程序教学设计一、教材分析本课选自粤教版高中信息技术选修1《算法与程序设计》第四章第五节。第四章围绕算法展开的穷举、解析、排序、查找等内容,学生均已系统学习,递归是本章收束性的内容,也是整个模块难度最大的一个知识点。教材通过"汉诺塔"问题引入递归思想,以自定义函数自我调用的方式呈现递归程序的编写方法,并以阶乘、斐波那契数列为例展示递归的数学表达与程序实现。从知识体系看,递归处在"结构化程序设计"的顶点位置。前面学生掌握了顺序、选择、循环三种基本结构和自定义函数的编写,递归恰恰是函数知识的深化——函数调用自身,这要求学生在原有函数知识基础上完成一次认知跃迁。可以说,学懂了递归,学生对程序执行机制、函数调用栈的理解才算真正完整。从思维培养看,递归是计算思维中最具代表性的思维方式之一。它体现"大问题化小问题、同构子问题层层下放、触底依次回代"的分解与还原策略,这种策略与数学归纳法同源。新课标对必修模块提出的"掌握算法与程序设计的基础知识和基本技能,发展利用计算思维解决问题的能力"这一要求,在本节得到了最直接的回应。二、学情分析授课对象为高中选修1模块的学生,此前已完成VB语言(或Python语言)基础语法、三种基本结构、数组和自定义函数的学习,能够独立编写百行以内的程序,具备调试和代码阅读能力。困难点是清晰的。第一,学生在数学课上接触过递推思想,如数列通项的递推公式,但对"函数调用自己"这一反直觉的操作缺乏经验支撑,容易产生"函数调用自己是死循环"的直觉性误解。第二,学生对程序执行在内存中的过程只有抽象感受,递归调用栈的入栈、出栈过程看不见、摸不着,是理解瓶颈。第三,递归与循环的边界模糊,学生容易把递归当作"另一种循环"来记忆,而不能从问题结构特征上判断何时该用递归。学生的优势同样存在。高中生的抽象逻辑思维趋于成熟,数学归纳法的学习为递归起了脚手架作用;学生对新奇问题有探索欲,"汉诺塔最少移动多少次"这类带有传说色彩的问题本身就有吸引力。教学设计的任务,就是把学生的直觉好奇转化为可推理、可验证、可实现的知识建构过程。三、教学目标知识与技能:理解递归的概念和递归执行的基本原理,能说清递归调用中"递推下去、回归上来"的两个阶段;掌握递归程序的两个必备要素——递归终止条件与递归公式;能用递归方法编写阶乘、斐波那契数列、汉诺塔等典型问题的程序。过程与方法:经历"生活现象感知—数学问题建模—程序实现验证"的完整过程,学会把复杂问题分解为同构的小规模子问题;通过手绘调用栈、跟踪变量变化、打印中间结果等具体手段,把不可见的程序执行过程呈现出来,积累调试递归程序的策略。情感态度价值观:在破解汉诺塔64层传说的过程中感受数学之美与算法之美,体会"以小见大、以简驭繁"的思维力量;通过对比递归与循环两种实现方式,形成辩证看待技术方案优劣的态度,不为炫技而递归。四、教学重点与难点教学重点:递归程序的两大要素,即递归终止条件与递归关系式;递归函数的定义。之所以将重点定在这里,是因为这两点抓住了递归程序的全部骨架,学生只要真正理解"什么时候停、每一步怎么缩小",就握住了编写递归程序的钥匙。教学难点:递归程序的执行过程,即函数调用栈的入栈与出栈机制,以及在此基础上对递归适用场景的精准判断。突破策略是用三个层次的"可视化"解决——动画演示栈的变化、手绘f(4)调用树、在程序中插入打印语句让程序"自己说出"执行轨迹。五、教学方法与教学准备教法上采用问题驱动与启发讲授结合,关键处用微课视频突破难点,练习环节采用分层任务驱动。学法上引导学生进行类比联想(数学归纳法、俄罗斯套娃)、动手推演(纸笔画调用栈)和独立调试。课前准备:机房安装Python开发环境;教师准备汉诺塔互动小游戏、递归调用栈动态演示微课、印有f(n)调用树空白框架的学习任务单;把学生按异质分组,每组四人,设组长一人负责记录讨论结论。六、教学过程(一)情境导入:一个算不出来的问题(约7分钟)上课伊始,教师讲述汉诺塔的传说:古印度神庙里有三根金刚石柱子,第一根上套着64个大小不一的金盘,小盘在上、大盘在下,僧侣要把全部金盘移动到第三根柱子上,规则是每次只能移动一个盘,且任何时候大盘不能压在小盘上面。传说当64个盘全部移完,世界就会毁灭。教师抛出问题:如果僧侣每秒移动一个盘,需要多少时间?请学生先猜一个数量级。学生的猜测往往从几十小时到几万年不等。教师不急于揭晓,而是引导:直接算太难,我们先把盘子数量降下来。教师现场操作三层汉诺塔的动画,请学生口述移动步骤,记录最小步数为7步;再让学生两人合作推演两层的情况,得出3步。黑板上留下两组数据:2层3步,3层7步。教师追问:4层呢?有学生发现规律猜想15步,猜想依据是"每一步翻倍再加1"。教师顺势点题:n层的问题似乎和n−1层的问题有密切关系——这种"自己调用自己"的思想,就是今天要学的递归。这个导入把数学猜想、问题分解和本课主题三件事一次完成,抽象的递归思想在学生眼里先有了具体的载体。(二)概念建构:递归是什么(约8分钟)教师先给递归下一个朴素的描述:自己直接或间接调用自己的过程,叫做递归。接着用两件事物帮助学生建立直观。第一件是两面镜子相对放置时出现的无限嵌套影像;第二件是俄罗斯套娃——打开一个还有一个小一号的,直到最小那个打不开为止。教师强调套娃这个比喻的两个要点:一是每一层结构相同,只是规模变小;二是必有最小的一个,否则就永远开不完。这两点直接对应递归程序的两大要素——递归公式和终止条件。随后板书概念结构:一个递归过程必然包含两部分,一部分描述了问题向更小规模的自我转化(递推关系),另一部分描述了达到何种规模时不再转化而直接给出答案(边界条件)。此处教师专门处理学生最容易犯的错误:"递归就是死循环"。教师对比演示:缺少终止条件的函数factorial(5),计算机会一直调用下去,直到系统报栈溢出错误;加上"当n等于1时返回1"之后,程序在一瞬间完成。同学机前亲眼看到死循环和正常结束两种结果,"边界条件是递归的生命线"这句话就有了体验支撑,而不是一句背下来的结论。(三)典例剖析:阶乘的递归实现(约12分钟)这是本课的核心环节。教师从学生熟悉的阶乘定义出发:n!=n×(n−1)×...×2×1。引导学生观察:5!不就是5×4!吗?于是黑板上写出一个关键等式:n!=n×(n−1)!,其中当n等于1时结果为1,这就是边界。教师带领学生一步步写出递归函数。Python代码如下:```deffactorial(n):ifn==1:return1else:returnnfactorial(n1)```代码写完后不急于运行,而是先手工推演factorial(4)的执行过程。教师在黑板上画调用栈,一层一层往下画:factorial(4)要算出答案,需要4×factorial(3)的结果,于是暂停当前层,去执行factorial(3);factorial(3)需要3×factorial(2);factorial(2)需要2×factorial(1);到factorial(1)时命中边界条件,直接得到1。然后栈开始回卷:factorial(2)得到2,factorial(3)得到6,factorial(4)得到24。教师强调"递下去、归上来"这个阶段概括,并指出每一层调用都是独立的,内存中有各自的局部变量n,调用过程中老函数并不消失,而是挂起等待新函数返回结果——这就是栈"后进先出"的含义。接着做可视化验证。让学生在函数入口和返回前各加一行打印语句,输出当前进入的n值和返回的结果。学生运行后从屏幕上看到:进入的顺序是4、3、2、1,返回的顺序是1、2、3、4、24,执行轨迹一目了然。学生亲手验证了"先递后归"的轨迹,调用栈不再是需要死记的名词。(四)对比提升:递归与循环(约6分钟)教师请学生回忆之前用循环写阶乘的方法,请一位学生口述或上黑板写出循环实现。然后把两种代码并排展示,组织小组讨论以下问题:两种写法在思路上有何不同?各自的优点是什么?什么情况下递归的表达更自然?讨论后教师归纳:循环是"自底向上"的积累,从1开始一步步乘上去;递归是"自顶向下"的拆解,从目标出发层层缩小直到触底。递归代码通常更简洁、更贴近数学定义,但代价是占用栈空间、执行效率可能较低;循环没有栈溢出风险,但对某些结构性的问题——比如树状结构、分形——表达起来远不如递归清晰。结论是:递归不是循环的替代品,而是另一种思维工具,选择依据是问题本身的结构是否呈现"自相似"的同构特征。(五)回归引例:攻克汉诺塔(约8分钟)此时回到开课的汉诺塔问题。教师引导:要把n个盘从A柱移到C柱,可以分解成三步——先把上面n−1个盘借助C移到B,把最大的一个盘从A移到C,再把n−1个盘从B移到C。这不就是"比原问题小一号的同类问题"吗?师生共同写出伪代码,再由学生动手在机房里补全为Python程序:```defhanoi(n,a,b,c):ifn==1:print(a,">",c)returnhanoi(n1,a,c,b)print(a,">",c)hanoi(n1,b,a,c)```学生分别输入n=2、3、4运行,核对移动步数分别是3、7、15,与开课猜想一致。教师再引导推算一般规律:移动次数为2的n次方减1。代入n=64得到约1.8×10的19次方次,按每秒一步折算要约5800亿年——宇宙从诞生至今也不过140亿年左右,"世界毁灭"的传说不过是古人对指数爆炸的夸张表达。此刻课堂会有一个小小的震撼时刻,数学的威力第一次明明白白地摊在学生面前。(六)拓展练习:斐波那契的递归表达(约6分钟)给出分层任务。基础题:用递归方法实现斐波那契数列第n项,边界是第1、2项为1,递推式是f(n)=f(n−1)+f(n−2)。提高题:画出f(5)的调用树,数一数递归共调用了多少次f(1),谈一谈为什么当n较大时这个递归会非常慢,为后续动态规划作伏笔。学生独立完成,教师巡视,重点关注两类典型错误:忘了写边界条件导致死循环;边界条件书写时漏掉了n等于2的情况。对有困难的小组,教师提示他们把n替换成4或5手工推演一遍。完成任务的学生上传代码,教师现场抽两份作业投屏点评,特别表扬能主动添加打印语句自行观察执行过程的学生。(七)课堂小结(约3分钟)教师不代为总结,而是请学生在任务单上独立完成三句话:递归的两个必要组成部分是什么;今天我们发现的递归编写"套路"是什么;循环与递归各自适合怎样的问题。小组内互查互改后,每组派代表汇报一条。教师最后提炼为一句话挂在黑板上:"递归=边界条件+自我相似地缩小问题"。同时布置课后任务,为下节课二分查找的递归实现做铺垫。七、板书设计主板书采用左右对照式布局。左侧呈现知识结构:一、递归:函数直接或间接调用自身二、两大要素:①边界条件(终止)②递推关系(缩小)三、执行特征:递下去→归上来(调用栈,后进先出)四、典型问题:阶乘、汉诺塔、斐波那契右侧作为推演区,画factorial(4)的调用栈示意图和汉诺塔三步分解示意,供课堂推演随时擦改补充。右下角预留"随堂生成区",记录学生的疑问与精彩回答,凸显课堂生成性。八、分层作业设计基础层:完成教材本节习题,用递归求1到n的累加和,并手工推演n=4的执行过程。发展层:用递归实现斐波那契数列,比较n=30和n=40的运行时间,分析原因。挑战层:查阅资料了解"快速排序"或"二分查找"的递归实现思路,下节课进行三分钟微报告。分层设计呼应学情差异,挑战层把本课与后续查找、排序内容轻轻勾连,让递归思维持续生长。九、教学反思本课设计的核心判断是:递归教学的成败不在语法讲解,而在执行过程的可视化和问题结构的同构性感知。因此全课把汉诺塔

温馨提示

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

最新文档

评论

0/150

提交评论