用递归法解决问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.5用递归法解决问题
【教材分析】
“用递归法解决问题”是《算法与程序设计》第三章第5节的内容,学业水平测试对本节内容也达到了B级要求,本节内容是在学习了VB基础知识中的三种基本结构,并且学习了数组、用解析法和穷举法解决问题等算法。本节先后介绍了“什么是递归法”、“自定义函数”、以及应用自定义函数结合递归算法来解决问题实例。通过本节内容的学习可以培养学生分析和分解问题的能力。从教材的结构上看“自定义函数”和“递归算法”是独立的,可以分别讲解,但在使用时两者是相辅相成的。
【学情分析】
这节课的教学对象是高中二年级学生,已经学习了算法与程序设计VB中的一些基础知识,初步了解了算法的概念。特点是在学习循环结构的过程中,学生已经积累了一些“递归”和“穷举”的算法。但是学生对函数尤其是“自定义函数”非常陌生,而“自定义函数”和“递归法”是本册的学习重点,也是以后编程的重点。学习本节内容学生可以充分体会递归算法的思想过程,扩大原来的知识面,进一步认识程序设计的功能,进一步激发学生学习算法与程序设计的兴趣。
【教学目标】
1.知识与技能:
理解什么是递归法,会用递归法的思想分析和解决问题
理解什么是自定义函数,能应用自定义函数实现递归算法的编程
2.过程与方法
学生通过思考、探究,体验递归算法和发现问题与解决问题的步骤
3.情感态度与价值观
在建立数学模型中培养学生的抽象思维能力,培养学生多维度思考问题和解决能力。
树立多学科整合的思想意识,能够用联系的观点解决问题。
【教学重点】
理解什么是递归算法,学会用递归法的思想分析问题。
理解自定义函数的概念。
【教学难点】
用自定义函数和递归算法编写程序解决问题
【教学方法及策略】
采用程序展示法、讨论总结法、讲解法、启示引导法。
本节以一简单的例子对比VB中提供的标准函数,引出本节的第一项内容,自定义函数并加以讲解使学生掌握自定义函数的方法,由于理解和学习递归法比较困难,要求学生具有很强的抽象思维能力,如直接讲解则学生很难达到预期效果,在讲递归法之前是我让5位具有表演天赋同学表演一场戏(5人的年龄问题),创造递归情境,同时留下问题“第一位同学应该怎么说?”通过问题情境引出和深化学生对递归算法的理解。当然本节内容这个步骤也可以交换顺序。同时鼓励和引导学生探讨递归法解决问题的条件和特点并加以归纳和总结。
教学中所用到的素材:
1、输入圆半径,可求圆面积的小程序VB源文件。
2、斐波那契数列VB源文件。
3、极域电子教室广播系统
4、电子课件
【教学过程】
环节教师活动学生活动设计意图
复习标准函数提出问题复习函数:
y=abs(9)
y=int(9)
y=sqr(9)
以上函数可以对9求绝对值,取整,
开平方。提出问题:有没有可以求以
9为半径的圆的面积。
思考、讨论、找答案
结果:没有这样的函数
提出问题激
发学生兴趣
和求知欲
启发主体进一步提出问题:
我们怎样实现求圆的面积的程序
呢?请同学们编写程序在文本框中
输入半径求圆的面积
学生探究:
得出结果
PrivateSubCommand1_Click()
Dim r, s As Single
Const pi = 3.14
r = Val(Text1.Text)
s = pi * r * r
Print CStr(s)
End Sub
教师展示教师给予表扬:同学们做的很好,以
前学的知识很扎实,我们已经可以利
用这些知识来解决问题。
我也写了一个程序给同学们的不一
样,也可以实现上述功能:
代码如下:
Private Function mj(r As Single) As
Single
Const pi = 3.14
mj = pi * r * r
End Function
Private Sub Command1_Click()
Dim s As Single
Dim a As Single
a = Val(Text1.Text)
s = mj(a)
Print CStr(s)
End Sub
观察、思考
提出以下代码的疑问:
Private Function mj(r As Single) As
Single
Const pi = 3.14
mj = pi * r * r
End Function
这些代码是干什么呢?
进一步调动
学生求知欲
演示上述程序的功能。
同学们可以看以下,我在程序代码中使用了一个mj()函数求出了输入半径的圆面积。那么mj()函数就是我们要找的求已知半径圆的面积的函数。
启发主体,引出如何自定义函数教师:
像y=abs(9)
y=int(9)
y=sqr(9)
这些语句中的函数在VB中已经存在
了,称作是VB的标准函数,我们可
以直接调用就可以了,而刚才我们使
用的mj()函数,不是VB的标准
函数,需要我们DIY。请同学们看课
本66页。我们如何自定义函数。
学生看教材,找出自定义函数的语句,
理解和记忆自定义函数的方法。
教师总结[public/prinvate]function <函数名称
>[参数列表]as 数据类型
局部常量、量定义
语句组
函数名称=返回值
end function
师:请同学们归纳一个使用自定义函
数的作用
学生:
讨论、归纳
得出:
1.可以方便地把较为复杂的问题分解
成若干个小问题去处理。
2.使程序结构清晰,层次分明,增强
了程序的可读性
培养学生归
纳、总结的
能力,增强
学生对自定
义函数的理
解。
创设情境导演一场戏:
找5位同学表演,按序号排好顺序,
问第5位同学说比第4位同学大2
岁,问第三位同学,说比第3位同学
大2岁,问第3位同学说比第2位同
学大2岁,问第2位同学说比第1位
同学大2岁,问第一位同学,他说他
20岁,求第5位同学的年龄是多少。
讨论、归纳、分析
生:
每位同学说的话都是一样的:
“我比前一位同学大2岁”
实例教学,
通过简单的
例子学生的
兴趣,学生
可以轻而找
出问题的规
律,体验问
题的发与
收,从而走
向递归的思
维模式,为
进一步讲解
递归法埋下
伏笔。
师:
规则:
1.从后往前按顺序问;
2.每位同学回答的结果一样;
3.一直到第一位同学找出“答案”。
启发主体师:
我们刚才学习了自定义函数,知道了
函数是为了实现某种功能而编写的
一段相对独立的程序。
学生探讨:
得出public function nl( n as integer) as
integer
nl=nl(n-1)+2
通过错误的
程序代码再
次激发学生
的未知欲,