用递归法解决问题_第1页
用递归法解决问题_第2页
用递归法解决问题_第3页
用递归法解决问题_第4页
用递归法解决问题_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、3.5用递归法解决问题 【教材分析】“用递归法解决问题”是算法与程序设计第三章第5节的内容,学业水平测试对本节内容也达到了b级要求,本节内容是在学习了vb基础知识中的三种基本结构,并且学习了数组、用解析法和穷举法解决问题等算法。本节先后介绍了“什么是递归法”、“自定义函数”、以及应用自定义函数结合递归算法来解决问题实例。通过本节内容的学习可以培养学生分析和分解问题的能力。从教材的结构上看“自定义函数”和“递归算法”是独立的,可以分别讲解,但在使用时两者是相辅相成的。【学情分析】这节课的教学对象是高中二年级学生,已经学习了算法与程序设计vb中的一些基础知识,初步了解了算法的概念。特点是在学习循环

2、结构的过程中,学生已经积累了一些“递归”和“穷举”的算法。但是学生对函数尤其是“自定义函数”非常陌生,而“自定义函数”和“递归法”是本册的学习重点,也是以后编程的重点。学习本节内容学生可以充分体会递归算法的思想过程,扩大原来的知识面,进一步认识程序设计的功能,进一步激发学生学习算法与程序设计的兴趣。【教学目标】1知识与技能:理解什么是递归法,会用递归法的思想分析和解决问题理解什么是自定义函数,能应用自定义函数实现递归算法的编程2过程与方法学生通过思考、探究,体验递归算法和发现问题与解决问题的步骤3情感态度与价值观在建立数学模型中培养学生的抽象思维能力,培养学生多维度思考问题和解决能力。树立多学

3、科整合的思想意识,能够用联系的观点解决问题。【教学重点】理解什么是递归算法,学会用递归法的思想分析问题。理解自定义函数的概念。【教学难点】用自定义函数和递归算法编写程序解决问题【教学方法及策略】采用程序展示法、讨论总结法、讲解法、启示引导法。本节以一简单的例子对比vb中提供的标准函数,引出本节的第一项内容,自定义函数并加以讲解使学生掌握自定义函数的方法,由于理解和学习递归法比较困难,要求学生具有很强的抽象思维能力,如直接讲解则学生很难达到预期效果,在讲递归法之前是我让5位具有表演天赋同学表演一场戏(5人的年龄问题),创造递归情境,同时留下问题“第一位同学应该怎么说?”通过问题情境引出和深化学生

4、对递归算法的理解。当然本节内容这个步骤也可以交换顺序。同时鼓励和引导学生探讨递归法解决问题的条件和特点并加以归纳和总结。教学中所用到的素材:1、输入圆半径,可求圆面积的小程序vb源文件。2、斐波那契数列vb源文件。3、极域电子教室广播系统4、电子课件【教学过程】环节教师活动学生活动设计意图复习标准函数提出问题复习函数:y=abs(9)y=int(9)y=sqr(9)以上函数可以对9求绝对值,取整,开平方。提出问题:有没有可以求以9为半径的圆的面积。思考、讨论、找答案结果:没有这样的函数提出问题激发学生兴趣和求知欲启发主体进一步提出问题:我们怎样实现求圆的面积的程序呢?请同学们编写程序在文本框中

5、输入半径求圆的面积学生探究:得出结果privatesubcommand1_click()dim r, s as singleconst pi = 3.14r = val(text1.text)s = pi * r * rprint cstr(s)end sub教师展示教师给予表扬:同学们做的很好,以前学的知识很扎实,我们已经可以利用这些知识来解决问题。我也写了一个程序给同学们的不一样,也可以实现上述功能:代码如下:private function mj(r as single) as singleconst pi = 3.14mj = pi * r * rend functionprivate

6、 sub command1_click()dim s as singledim a as singlea = val(text1.text)s = mj(a)print cstr(s)end sub演示上述程序的功能。同学们可以看以下,我在程序代码中使用了一个mj()函数求出了输入半径的圆面积。那么mj()函数就是我们要找的求已知半径圆的面积的函数。观察、思考提出以下代码的疑问:private function mj(r as single) as singleconst pi = 3.14mj = pi * r * rend function这些代码是干什么呢?进一步调动学生求知欲启发主体,

7、引出如何自定义函数教师:像y=abs(9)y=int(9)y=sqr(9)这些语句中的函数在vb中已经存在了,称作是vb的标准函数,我们可以直接调用就可以了,而刚才我们使用的mj()函数,不是vb的标准函数,需要我们diy。请同学们看课本66页。我们如何自定义函数。学生看教材,找出自定义函数的语句,理解和记忆自定义函数的方法。教师总结public/prinvatefunction 函数名称参数列表as 数据类型局部常量、量定义语句组函数名称返回值end function师:请同学们归纳一个使用自定义函数的作用学生:讨论、归纳得出:1可以方便地把较为复杂的问题分解成若干个小问题去处理。2使程序结

8、构清晰,层次分明,增强了程序的可读性培养学生归纳、总结的能力,增强学生对自定义函数的理解。创设情境导演一场戏:找5位同学表演,按序号排好顺序,问第5位同学说比第4位同学大2岁,问第三位同学,说比第3位同学大2岁,问第3位同学说比第2位同学大2岁,问第2位同学说比第1位同学大2岁,问第一位同学,他说他20岁,求第5位同学的年龄是多少。讨论、归纳、分析生:每位同学说的话都是一样的:“我比前一位同学大2岁”实例教学,通过简单的例子学生的兴趣,学生可以轻而找出问题的规律,体验问题的发与收,从而走向递归的思维模式,为进一步讲解递归法埋下伏笔。师:规则:1从后往前按顺序问;2每位同学回答的结果一样;3一直

9、到第一位同学找出“答案”。启发主体师:我们刚才学习了自定义函数,知道了函数是为了实现某种功能而编写的一段相对独立的程序。我们可以编写一段程序来自定义上述的函数吗?根据学生自定义函数的代码师生共同探讨总结,找出错误的原因:同学们找出了nl(n) 与 nl(n-1)的规律了,但是如果没有限制的话,就会无限次的执行下去,于是出现上述错误。对于这种问题我们该如何解决?教师对学生的探讨给予表扬和鼓励。进一步课件演示:1建立数学模型2自定义函数3调用函数解决问题像这种自己调用了自己的函数叫做递归调用,这种算法就叫做递归算法。学生探讨:得出public function nl( n as integer)

10、as integernl=nl(n-1)+2end function学生运行结果如下:生:因为我们就5个人,问第一人时他必须说出答案,可以使用if语句进行条件限制。public function nl( n as integer) as integerif n=1 thennl=15elsenl=nl(n-1)+2end ifend function通过错误的程序代码再次激发学生的未知欲,培养学生的自主探讨精神。自主构建课本68页,以兔子的繁殖问题,引出“斐波那契数列”我们如何使用递归法来求出第m月的兔子数量?11235813假设第m个月的兔子数量为s(m)则建立数学模型:s(m) = s(m

11、-1) + s(m-2)(是不是所有的月份都满足此表达式)学生阅读、分析、讨论、编程尝试学生编程实现:public function s(m as integer) as integerif m= 1 or m=2 thens=1elses=s(m-1) + s(m-2)end ifend functiondim n as integerdim tu as integern=val(text1.text)tu=s(n)print cstr(tu)递归法的总结师生讨论共同总结(以下图为例): 1 递归法有什么特点?递推与递归的往返过程。2什么样的问题可以使用递归来解决?a递归体(数学模型)必须明确。b递归法是层层调用函数实现的,函数先由上向下调用,称为递推。c当问题求解的规模越来越小时,必定有一个结束条件作为递推出口。d递归法的可读性强。师生共同讨论达成共识课后实践案例:有一天一只猴子摘了一堆桃子,第一天吃了总桃数的一半,嘴馋,又多吃一个,第二天又吃了剩下的一半,又嘴馋,再多吃一个

温馨提示

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

评论

0/150

提交评论