《2022年递归调用教学设计》由会员分享,可在线阅读,更多相关《2022年递归调用教学设计(5页珍藏版)》请在金锄头文库上搜索。
1、学习必备欢迎下载C 语言递归调用教学设计教学目标及依据:根据教学大纲和本节学习重点,结合学生知识现状,使学生学会使用和设计递归函数去解决较复杂的问题。教学重点难点:递归函数的定义、递归问题的分类、递归函数设计的一般步骤理解递归函数的内涵、确定递归结束条件。 搞清楚函数递归调用的运行轨迹和各层调用中参数和变量的值是真正掌握递归的关键。教学方法及依据:依照五星教学方法,结合游戏激发学习兴趣,巧解概念, 然后进行例题分析,最后进行实验在解决实际问题中跟进一步的掌握知识。教学手段:多媒体课件及教学视频。教学课时:理论两课时 +实验一课时教学过程:1、激发旧识:在上课之前先让学生回去复习函数的知识,清楚
2、的掌握函数的定义,函数的参数,函数的值,函数类型等知识为递归调用做好准备。2、示证新知:在学生熟知已学过的函数知识后就可引出要学习的递归调用进行学习,这一步骤也是一个承上启下的关键,在这一部分中学生因在老师的带领下学习递归调用,在学习过程中可以结合游戏的方式来让学生来扮演递归运行轨迹中各层次的调用函数通过学生之间的提问和回答来模仿函数之间传递的数据然后把游戏过程表示成递归公式。最后写出程序。 通过这样的过程。学生很容易搞清楚函数递归调用的运行轨迹和各层调用中参数和变量的值从而能更好地理解和掌握递归。2.1 递归函数的基本知识:在这一部分老师通过之前已经做好的课件给学生讲解递归函数的基本知识。2
3、.1.1 递归函数概念:递归函数即自调用函数,在函数体内部直接或间接地自己调用自己,即函数的嵌套调用是函数本身。2.1.2 递归函数的形式:直接递归调用:函数中出现调用函数本身间接递归调用:间接递归调用是指函数中调用了其他函数而该其他函数却又调用了本函数。2.1.3 递归条件:须有完成函数任务的语句个确定是否能避免递归调用的测试一个递归调用语句先测试,后递归调用。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 5 页学习必备欢迎下载2.1.4 设计递归函数分治法(分割求解)后置递归法回溯法分别讲授这三种方法的思想在接下来具体程序的讲解中
4、再融会贯通2.2 直接递归调用:在课堂授课时, 教师在面对在座的一列学生时(假设这列学生有5名 ), 问最后一名学生,即第 5 名学生。他和他前面这一列学生的年龄总和是多少(假设学生之间不知道相互的年龄),这时第 5 名学生要知道他和他前面这一列学生的年龄总和,就需先向他前面的第4 名学生提相同的问题第4 名学生又需向第3 名学生提相同的问题,依次类推, 直到最前面的第1名学生。这时第1 名学生前面已无其他学生,这时他只需将自己的年龄告诉后面的第2 名学生。第 2名学生将前面同学的答案加上自己的年龄然后把结果告诉后面的第3名学生,依次类推,第 5 学生将第 4 名学生的答案加上自己的年龄,再告
5、诉教师, 教师就可以知道这列学生年龄的总和。上述游戏中求第n个学生和他前面这一列学生年龄总和的功能可用递归函数totalAge(n)来实现算法可表示为下面的递归公式。返回 myAge+totalAge(n-1) n1 totalAge(n)= 给出程序如下所示:#include #include int totalAge(int n1 /用于求第n 个学生和他前面这一列学生的年龄总和 int total,myAge ; , ,变量 myAge 表示第 n 个学生的年龄printf( ”进入 totalAge( d)kn” ,n);prinf( ”请输入第d 排学生的年龄,n);scanf(”
6、dt , myAge) ;if(n1) total=myAge+totalAge(n-1) ;else if(n=l1/ 递归结束条件total=myAge ;printf( ”从 totalAge( d)qI1 dkn” , n,tota1);getehO;retumtotal; voidmainO intm:prinf( ”请输入该列学生的人数:”);scarf(“ dt , m);if(m1) FtotalAge(n)= 返回 myAge (n=1) 返回 myAge+FtotalAge(n-1) (n1) MtotalAge(n)= 返回 myAge (n=1) 程序如下所示:#inc
7、lude #include int MtotalAge(int n) ;int FtotalAge(int n) ;int MtotalAge(int n) /用于求第n 排男生处的结果 int myAge ; ,/变量 myAge 表示第 n 排男生的年龄int total ; ,/变量 total 表示第 n 排男生处的结果prinf( ”进入 MtotalAge( d)n” ,n1;精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 5 页学习必备欢迎下载prinf( 请输入第d 排男生的年龄I1,n);scanf(” d” ,&my
8、Age) ;if(n1) total=myAge+FtotalAge(n- 一 11;else if(n=l1 ,/递归结束条件total=myAge ;prinf( ”从 Mt0talAge( d)中返回 d、ll ” ,ntota1);getch0;returntotal; int FtotalAge(int n) /用于求第n 排女生处的结果 int myAge ; ,/变量 myAge 表示第 n 排女生的年龄int t0tal : ,/变量 total 表示第 n 排女生处的结果prinf( ”进入 otalAge( d)kn,n) ;prinf( ”请输入第d 排女生的年龄I,n)
9、;scanf(” d &myAge) ;if(n1) total=myAge+MtotalAge(n-1);else if(n=11)/ 递归结束条件total=myAge ;prinf( ”从 Fl0ta ge(d)中返回 d、ll ” ,n,tota1);getch0;retum total; void main0 int m:prlntf( 请输入排数: ”);scanf(” d , m);m=0) prinf( ”学生不能少于1 排!Xn ”1) else printf( ”学生的年龄总和为:dn,MtotalAge(m)+Ftota一 Age(m) ; 间接递归由于相对较为复杂执行过
10、程中出现函数调用的交叉和循环,所以这部分内容,很多教师不讲授我们通过游戏的方式使看起来复杂的过程变得生动和易于理解。可以通过以下图结合刚刚的程序和游戏更具体形象的给学生讲解。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 5 页学习必备欢迎下载3、尝试应用:在两个理论课时之后紧跟着安排上机实验巩固理论课上学到的新知识,在解决实际问题中得到提高。 因为在理论课上引进通过游戏给学生具体的讲解了递归函数的注意事项和特点还有怎么设计一个递归函数,并通过游戏让学生也参与进来进行具体的程序讲解。所以在上机实验的时候可以再出几个类似的例子,但是, 可
11、以在难度上增加一点,这样可以让学生在解决实际问题中吸收新知识,达到能更好的运用解决实际问题的目的。4、总结归纳:在上机实验结束前学生将自己设计的程序上交给老师,老师在审阅每个同学的作业后给予评价, 指出学生在程序中表现出来的不足和亮点,给学生提出意见。最后针对整个班级的编程状态给出一个全面的建议,提出大多数人都会犯的错误,给出建议加以改进,最后交上一份比较完整的程序。5、融会贯通:在最后课程实践中给出综合性强的题目让学生利用递归来设计程序实现实际问题中设计的功能,这样不仅仅是让学生掌握递归调用的知识还能将之前所学的知识都运用上起到一个整体融会贯通的效果自我评价:整体教学过程的框架和步骤基本上是
12、根据五星教学法设计的,中间通过做游戏的方式引入递归的概念让学生来扮演递归运行轨迹中各层次的调用函数通过学生之间的提问和回答来模仿函数之间数据的传递使原来枯燥的教学变得活跃和有趣学生在游戏中轻松掌握了本来看似深奥和难以理解的知识点。游戏的穿插这也迎合了五星教学法的核心的一点即,当学习者介入解决实际问题时才能够促进学习。在学习新知识之前很快的跟学生回忆总结之前学的知识也就是激活原有知识并将它作为新知识的基础够促进学习;然后引出要学习的新知识这样才能够促进学习;当学习者尝试应用新知时,才能够促进学习,所以就在理论课时之后加上上机实验来巩固新知;当新知识与学习者的生活世界融于一体时,才能够促进学习。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 5 页