《递归的概念与特征》教学设计方案
学校名称 执教教师
课程内容 递归的概念与特征 课程学时 第一课时
所属课程 《数据与数据结构》 教学对象 高二学生
教学设计理念
探究性学习理论 《基础教育课程改革纲要》中倡导学生主动参与,乐于探究。教师从日常生活讲起,引导学生从质疑、发现问题、提出问题、探究问题、到基于自身知识与进一步的学习成功解决问题,感受新知,获取解决问题的成就感,激发学生学习与探究的兴趣,既让学生掌握到探索问题的一般方法,又使学生感受到计算思维在生活中的魅力,提升学生的学习动机,达到良好的教学效果。 有意义学习理论 奥苏贝尔认为,有意义学习是指在学习的过程中,符号代表的新知识与学习者认知结构中已有的适当观念之间建立起实质性的,非人为的关系。有意义学习的条件为以下三点,学习者要有从事有意义学习的倾向(心向),即有较强的学习兴趣和学习动机。此外,学习者必须能够积极主动地去实现新旧知识之间的联系。最后,学习者还应具备学习新知识所需要的适当的旧知识,以便形成联系。 合作学习理论 合作学习是指2到6名能力各异的学生组成一个小组,以合作和互助方式从事学习活动,共同完成小组学习目标,在促进每个人的学的前提下,提高体成绩,获取小组奖励。合作学习的目的不仅是培养学生主动求知的能力,而且发展学生合作过程中的人际交流能力。合作学习思想来源于杜威集体活动和集体项目的观点。
教材内容分析
《递归的概念与特征》是人教版信息技术选修一《数据与数据结构》第四单元第三节的内容,前面已经学习了算法的相关问题、迭代法与问题解决。通过前面的学习学生已经可以了解了关于算法的基本知识和利用算法解决问题的一般步骤,也能利用Python编写程序解决简单的问题。教材主要以“计算阶乘这一问题作为出发点,分别从递归算法的概念、两个必要条件、应用场景三个方面讲解,通过教师讲授和小组合作探究的学习形式帮助学生理解递归算法把规模大的、较难解决的问题变成规模较小的、易解决的同一问题的基本思想,体会利用计算思维将抽象问题转化为数学模型的过程。
教学目标(知识与技能、过程与方法和情感与态度等)
知识与技能: 学生能够理解什么是递归算法,学习利用递归算法的思想分析问题 通过学习,学生能够明确递归的两个必要条件,并设置正确的递归出口使程序结束 掌握递归算法的应用场景。 过程与方法: 学生能够应用函数递归算法编程处理简单的实际问题 学生能够利用递归算法分析解决问题,编写代码得出结果 情感态度与价值观: 通过合作探究学习,学生能够主动思考问题,感悟数据结构与算法的实际应用价值,激发学习兴趣,形成积极主动学习的态度 通过分析、研究问题,理解从递归算法的“大事化小,小事化了”的基本思想,并能在之后的编程学习中加以利用,提高问题抽象、问题解决的能力。
教学重难点分析
重点 理解递归算法的含义、两个必要条件以及应用场景 利用递归算法分析简单的实际问题 应用函数递归算法编程处理简单的实际问题 难点 利用递归算法分析简单的实际问题 应用函数递归算法编程处理简单的实际问题
学习者特征分析
学习风格: 学生的学习风格类型场独立型和场依存型并存,本节课既有教师讲授环节,也有小组合作探究环节,兼具知识性与趣味性,难度适中,有助于激发学习者学习动机。 信息素养: 本节课的授课对象高二年级学生,在日常的学习生活经常使用信息技术工具进行学习、信息检索等活动,能够熟练的使用PAD、多媒体等现代信息化工具进行上课。 起点能力: 本节课的授课对象高二年级学生,经过一年信息技术的学习,学生已经掌握Python基本知识和算法解决问题的一般流程,并有一定的抽象思维和建模能力,能够设计简单的计算机程序解决一般的问题。
教学方法设计
合作探究法 通过小组成员合作探究学习可以更好的帮助不同水平的学生学习递归算法的概念和特征,在合作交流的过程中,学生可以发现自己存在的疑问并互相解答问题,锻炼学生自主学习能力和合作探究能力,能够对教学起到更好的辅助作用。 讲授法 通过教师对课程内容进行讲授,帮助学生深入理解递归算法的概念与特征。递归算法难度稍高,第一次学习算法是很难通过自主学习达到目标,这时通过教师的讲解对知识进行吸收学习和总结,反而会有更好的效果。
教学流程
教学步骤教师活动学生活动设计意图情境导入 引出主题同学们大家好,我们开始上课。 不知道大家有没有听过这样一个讲不完的小故事——从前有座山,山上有座庙,庙里有个老和尚在讲故事,讲的是什么呢?从前有座山,山上有座庙……在这个故事里,虽然只有一个故事,但是通过讲故事这个行为无限地将故事叠加,变成了一个永远没有尽头的故事。这种不断调用自己的思想在计算机编程中被称作“递归”,今天这节课我们就一起来了解一下神奇的递归吧。思考趣味小故事有什么特点课堂开始时创设情境,通过大家都很熟悉的趣味小故事引出本节课要讲的内容,激发学生的学习兴趣。教师讲解 学习新知我们刚才提到了递归,那么究竟什么是递归呢? 实际上,递归的意思就是函数在执行时调用函数本身。 函数的递归调用是指一个函数在它的函数体内,直接或间接地调用它自身,称为递归调用。这种函数称为递归函数。思考什么是递归。引出本节课的主要内容,讲解什么是递归函数。函数是怎样自己调用自己的呢? 我们先来看一个问题,(展示问题)利用计算机编程求解一个正整数的阶乘。请同学们思考一下能不能用我们之前学过的标准函数解决问题呢? 在这种情况下,标准函数已经无能为力,但我们可以通过之前学习过的自定义函数来定义一个可以求解阶乘的函数。 在定义函数之前,让我们来一起分析一下阶乘问题。 设表示n的阶乘,根据阶乘的定义,我们可以得出。即 同学们思考一下,这些算式之间存在着什么联系呢?(回答问题) 没错,大家说的很对,在我们计算n的阶乘时,如果我们知道n-1的阶乘,那么我们就可以直接用n与n-1的阶乘相乘得到n的阶乘。也就是 因而,我们可以得到下面的表达式: 思考分析阶乘函数如何计算。跟着教师的分析思路一步一步简化问题,并积极回答老师提出的问题。通过对例子的分析学习帮助学生更好地理解什么是函数的递归调用,同时培养学生的数学建模能力和思维。根据问题的分析过程和我们得到的计算的表达式,我们可以使用python语言写出计算自然数n的阶乘的程序: def f(n): if n <= 1: return 1; else: return n * f(n – 1) print(“请输入一个正整数: “, end = “”) n = int(input()) print(“%d的阶乘是%d。” % (n, f(n)))
在上述程序中,函数f又调用了函数f,这种通过直接或间接地调用自身来解决问题的方法被称为递归。理解分析解决阶乘函数的代码,观察代码运行结果。通过由思维到实际的代码的跨越实现,培养学生的代码编写能力和抽象思维,进一步帮助学生理解递归算法。整个计算过程就如我们PPT所展示的图片一样。当我们输入5时,进入f函数,不满足n <= 1的条件,故会执行else的条件,else里程序会再次调用f函数计算f(4),f(4)里也会调用f函数计算f(3),直到f(2)调用f(1)后f(1)返回1,再逐步将结果返回回去,最终得到f(5)的值。 对应的,我们可以通过输出调试语句跟踪递归函数中参数n的变化情况: def f(n): if n <= 1: return 1; else: print(str(n) + “*f(“ + str(n – 1) + “)”) return n * f(n – 1) print(“请输入一个正整数: “, end = “”) n = int(input()) print(“%d的阶乘是%d。” % (n, f(n)))
通过观察递归运行示意图和调试语句的打印了解函数递归调用的过程。通过递归算法示意图和输出调试语句学习递归的调用过程,深入理解自己调用自己的含义。使用递归算法解决问题需要具备两个要件:递归定义和递归的边界条件。 ■确定递归定义 使用递归解决的问题都可以通过同一套规则(即相同的程序)转化为比该问题更为简单的子问题,这套规则被称为该问题的递归定义或递归公式。例如,就是计算阶乘的递归公式。 ■确定递归的边界条件 经过不断缩小问题规模,问题最终能够得以解决。在刚才的问题中,5的阶乘经过不断简化,最终转化为求解1的阶乘,而1的阶乘是我们已知的。 这种能直接得到结果,从而终止递归的情况,称为递归的边界条件。通过实例学习递归算法的两个必要条件。将概念与之前讲解的实例对比,帮助学生更加清晰的理解递归算法的两个条件。合作探究 解决问题在第2章学习数组时我们知道,斐波纳奇数列指的是这样一个数列: 1,1,2,3,5,8,13,21,34,..即从第3项开始,每一项都是前面两项的和。请根据同学们根据斐波纳奇数列的定义,小组之间进行讨论合作,用递归算法去求解斐波那契数列的第n项,并编写计算斐波纳奇数列的程序,画出其递归过程的示意图,上传到我们的学习平台中去。小组合作讨论如何利用变成解决斐波那契的求解问题,并将讨论结果上传到学习平台。开展小组合作探究学习,让学生自己讨论解决问题,体会递归算法解决问题的思想和一般流程。我看各个小组都已经把编写的程序和递归示意图上传到了我们的学习平台,下面,让我们来一起分析一下这问题的递归定义和递归出口吧! 如果用f(n)表示计算斐波纳奇数列的函数,那么根据定义我们可以知道, 。当或者的时候为,所以此时我们直接返回结果就可以。 跟计算阶乘一样,我们可以得到以下表达式 通过学习平台可以看到很多小组都得到了正确的表达式并编写出了代码实现了斐波那契数列的计算。深入思考问题解决一般流程,把老师解决问题的思路与小组讨论中的思路进行对比,弥补自己的不足。教师对问题进行重点讲解分析,通过教师的点评和讲解,帮助使学生发现自己在探究的过程中的不足,培养学生抽象实际问题的能力。我们已经用递归算法解决了两个问题,那在什么情况下可以使用递归算法来解决问题的?(提问) 一、每次计算在规模.上都有所缩小。 二、可以通过同一套规则(即相同的程序)转化为比该问题更为简单的子问题。比如: 三、问题的规模极小时必须用直接给出解答。比如: 了解学习递归算法的应用场景,思考如何利用递归算法解决问题。通过教师讲解和自己独立思考,让学生体会到递归算法能够解决的问题和适用范围。教师点评 知识总结不仅是在数学问题中存在递归,生活中也存在很多类似递归的现象,比如大家小时候都很喜欢的俄罗斯套娃——由一些样式相同、大小不一的娃娃一个一个组装起来,被后人模仿传称套娃。只要认真观察,就能发现更多生活中的递归,甚至还能创造更多的递归。希望同学们不止在编程中应用递归思想,也能在生活中用“大事化小,小事化了”的思想解决更多的问题。总结回顾本节课的学习过程,巩固和发展本节课的学习内容。对应用算法和程序设计解决问题进行情感升华,培养学生的计算思维,帮助学生建立正确的信息社会责任,体悟算法之美。布置作业 巩固提升最后,给大家留一个思考任务: 作业:年龄问题 有5个人做在一起,问第5个人多大了。他说比第四个人大2岁,问第四个人多大了,他说比第三个人大2岁,问第三个人多大了,他说比第二个人大2岁,问第二个人多大了,他说比第一个人大2岁,最后问第一个人,他说他10岁了。 请大家用递归算法编写程序计算出第5个人多大了
课下完成作业,巩固所学知识。通过布置作业帮助学生课下巩固所学知识,对知识进行进一步的吸收理解。
教学流程结构设计
学习评价设计
多元化评价 学生根据学习效果评价表对自己本节课的学习做出自我评价 各个小组根据其他小组上传学习平台的小组成果进行小组间的互评 在课后教师利用线上教学平台给予每个学生对于本节课的表现以及任务完成度的评价,同时给出鼓励性和导向性的评价语并提出继续努力的方向和建议 附:学习效果评价表 学习内容递归算法的概念与特征姓名考察点评价指标个人评分对于递归算法概念的理解完全理解递归算法的含义,并且可以用自己的话描述出什么是递归算法,并可以回答相关问题,进行一些额外拓展。(5分)基本理解递归算法的含义,能够指出哪些算法的设计符合是递归的思想。(3分)不太理解什么是递归算法,仍需要进一步的思考与消化,或者需要一些老师或同学的帮助去理解递归的含义。(1分)对于递归算法两个必要条件的理解完全理解递归算法的两个必要条件,并且可以用自己完成两个条件的推导和设置,进而自行完成相关程序的编写。(5分)基本理解递归算法的两个基本条件,能够指出程序中哪些步骤对应哪个条件,可以自行完成条件的部分推导。(3分)不太理解递归算法的两个必要条件,能够通过老师或同学的帮助推导两个条件,需要进一步的思考与消化。(1分)对于递归算法的应用场景的理解完全理解递归算法的应用场景,并且可以举一反三,发现其他可以用递归算法解决问题。(5分)基本理解递归算法的应用场景,能够说出递归算法应用场景的特点。(3分)不太理解递归算法的应用场景,除了课上的例子外不知道递归算法还可以如何应用。(1分)利用代码实现递归程序的情况代码功能完整,并能够实现所要求的功能,程序结果完全正确。(5分)代码功能基本实现,但有小部分细节处理不够优美细致,有些数据结果会出错。(3分)代码功能未实现完整,程序未能运行出正确结果。(1分)