一、教学目标
(1) 理解什么是递归法,学会用递归法的思想分析问题。
(2) 理解什么是自定义函数,掌握自定义函数的定义方法。
(3) 学会用递归法编写程序解决问题。
二、教材内容分析
本节教材包括如下内容:什么是递归法、什么是自定义函数和递归法的实现。从教材结构上判断这些内容是相互独立的,因此可以根据教师的教学习惯调整前后顺序。
1. 什么是递归法
通过阅读教材中的“从前有座山……”的故事和对“两个镜子相互映射”现象的讲解,学生能基本理解递归思想,从而归纳总结递归法的概念,让学生从故事和实践活动中体会递归法的内涵,加深对递归思想的理解。
2. 什么是自定义函数
在程序设计过程中,自定义函数和子过程在编程中的重要性不言而喻,对于自定义函数的讲解应该是本节的重点,要精讲、细讲。首先教师可通过实例突出标准函数的不足,展现自定义函数的作用;然后演示如何定义函数、调用函数。教师可借用同样实例演示如何定义子过程、调用子过程,让学生体会函数和过程的区别。学生参照实例、自主探究、 尝试编写自定义函数和过程 也是一个可行的方法。 教师 对函数和过程的区别最好能做出概括总结。
3. 递归法的实现
由“兔子繁殖问题”导出 “斐波那契数列”,给出任务解决“斐波那契数列”问题,学生首先需要了解“斐波那契数列”的规律,利用图解法帮助学生理解“斐波那契数列”问题的规律。学生在对递归程序的理解上存在一定的困难,教师可从绘制流程图或编写伪代码入手,引导学生分析程序。对于递归法的 特点,教师可将递归法和解析法的程序作比较,和学生一起讨论。需要注意的是,这部分程序不是完整的程序,没有运行结果。对此,教师可要求学生设计界面和主程序,也可以将界面和主程序都设计好,只要求学生填写自定义函数。
本节的实践内容2、3都有一定难度,教师可让学生察看事先准备好的程序的运行情况,理解程序;也可选择其中的一个,在课上进行分析,要求学生在参数的设置上做相应的修改,体验参数变化给程序带来的影响和程序执行的效率问题。同时可以鼓励学生通过本章的学习总结,对几种算法进行比较,可设计一系列的任务或者利用教材中的练习,让学生选择最优算法。通过这种教学,让学生获得这样的思想:面对一个任务或问题,解决它的算法可能有很多种,需要对这些算法作出比较和选择。
三、教学方法及策略
可采用图例展示法、讨论总结法、讲解法、实习指导法等教学方法。
教师还可以利用兔子问题创设情境,引导学生分析斐波那契数列,再提出要编程的具体问题。案例中采用的是先讲解递归法,再讲解解析法,教师完全可以将二者变换顺序,先引导学生用解析法解决问题,再讲解递归法。不管什么顺序,教师都要明确本案例中使用解析法是为了和递归法进行比较。对学有余力的学生,可以让他们完成整个程序的编程,而不仅仅是“黑箱”部分,甚至可以要求他们对程序进一步优化。
四、教学过程
教学环节
|
教师活动
|
学生活动
|
设计意图
|
情
景
导
入
,
展
开
讨
论
|
提出兔子繁殖问题;
展示范例:运行程序,察看结果(见附录1);
展示部分程序(见附录2);
提出问题:程序的核心是根据月份 intmMonth 计算新兔子个数的自定义函数 Recursion(intMonth),这个自定义函数怎么编写呢?
|
观察范例;
思考程序;
写出自定义函数的框架结构。
|
激发学生的兴趣,引发学生的学习期待。
|
分
析
问
题
|
引导:图解兔子繁殖问题。
……
Recursion ( intMonth ) =
Recursion ( intMonth-1 ) +Recursion ( intMonth-2 )
分析 intMonth >2时,计算的值是通过多次调用自身函数实现的,这就是一种递归。
|
思考;
……
巩固递归思想。
|
分析任务,为编程做准备。
|
编
程
尝
试
|
对学生分组,4人一组;指导教师总结,图解递归过程。
|
小组讨论如何实现;补充自定义函数;验证程序;再次体验递归过程。
|
让学生体验递归程序的编程。
|
拓
宽
方
法
|
如果不用递归法解决问题,可以用其他方法吗?
我们已经抽取了数学模型,因此可用解析法。(讲解程序。)
|
浏览教材中的程序,思考参数不同时程序的运行过程。
|
体会递归法不是惟一方法,其他方法也能解决问题。
|
比
较
讨
论
|
这两种方法解决了同一问题,将这两种方法比较一下,概括递归法的特点。
教师做补充。
|
学生积极讨论,提出:程序短,结构清晰,可读性强。
|
比较这两种方法,体会递归法的特点。
|
附录部分程序代码
Dim n As Integer
Private Sub Command1_Click()
n = Val(Text1.Text)
Picture1.Print " 第 "; i; " 月兔子总数 "; Recursion(i); " 对 "
Next i
End If
End Sub '防止数据溢出程序无法执行
Private Function Recursion(ByVal intMonth As Integer) As Integer
If intMonth =1Then
Recursion =1
Else If intMonth =2Then
Recursion =1
Else
Recursion = Recursion(intMonth -1) + Recursion(intMonth -2)
End If
End Function
五、对该案例的评价
学生都是有好奇心的,本案例利用学生的好奇心,采用“黑箱”操作调动学生的兴趣。首先提出问题,接着通过范例程序解决问题,给学生一个直观印象。之后教师并没有直接一句一句讲解程序,而是展示部分程序,隐藏了重点的自定义函数,通过这种“黑箱”操作使学生产生求知欲,增强了学生的兴趣。“黑箱”使得任务非常明确,这有利于学生将注意力集中在递归算法上,也有利于学生在课堂内掌握。
教材中要求学生对递归法进行客观评价,教师并没有直接灌输,而通过进一步设疑,提出另一种解决问题的方法,再通过两种方法的比较,使学生自己能够客观分析递归法,了解其 特点。 对学生不能发现的特点,教师再加以补充,这样既全面地掌握了知识,体验了过程,又发挥了学生的自主性,锻炼了评价算法的能力。
分享到:
相关推荐
此代码展示了一种用递归解决迷宫问题的方法,可以自行输入迷宫即得到解答
此代码展示了一种用递归解决迷宫问题的方法,可以自行输入迷宫即得到解答
用递归解决八皇后 蛮简单的 用递归解决八皇后 蛮简单的用递归解决八皇后 蛮简单的用递归解决八皇后 蛮简单的用递归解决八皇后 蛮简单的用递归解决八皇后 蛮简单的
商人渡河问题是这样的:有三个商人,三个强盗,和一条船(船每次只可以载小于等于两个人)他们同在河的一边,想渡过河去,但是必须保证在河的任何一边必须保证商人的数目大于等于强盗的数目,应该怎么过这条河呢?
主要介绍了Python 实现递归法解决迷宫问题的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。这里提供一个C++语言的递归法的实现,代码已在VS2008下编译通过。相关博文地址: http://blog.csdn.net/jocodeoe/article/details/7067955
数据结构中递归是一个重要的部分,此程序是回溯法实现了迷宫的问题,比较简单,亲自测试成功。
题目描述:将一个8*8的棋盘进行分割,将原棋盘分割下一个矩阵,同时确保剩下的棋盘也是矩阵; 再将剩下的棋盘继续进行如上分割,这样割(n-1)次,最后原棋盘被分割成n块矩形棋盘; 注意:每次分割只能沿着棋盘格子的...
用自递归方法解决最大团问题,该方法属于exact algorithm。希望对大家有用。
解决汉诺塔问题, 用递归法将一个整数n转换成字符串。例如,如入483,应输出字符串“483”。N的位数不确定,可以是任意位整数。 1.3 建立一个包含加法函数、减法函数的动态链接库文件和一个包含加法函数、减法函数...
主要介绍了Java使用递归法解决汉诺塔问题的代码示例,汉诺塔问题是使用递归解决问题的经典范例,用到的算法非常简单,需要的朋友可以参考下
八皇后问题 递归算法 可以输入皇后的值 输出排列的结果
文档:贪心算法引申的非常规货币的凑钱问题,挂载的源码下载链接,通过贪心算法衍生至递归法解决硬币凑钱问题。 博客地址:https://blog.csdn.net/sinat_24470525/article/details/84635451
算法分析与设计 用递归分治算法解决大整数乘积问题(用java语言)
利用分治法解决凸包问题,递归调用,功能强悍,自己下载后在机器上跑一下
用回溯法求解八数码问题,使用的是递归的方法来求解。