`
v5qqcom
  • 浏览: 1282286 次
文章分类
社区版块
存档分类
最新评论

用递归法解决问题

 
阅读更多

一、教学目标

(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

五、对该案例的评价

学生都是有好奇心的,本案例利用学生的好奇心,采用“黑箱”操作调动学生的兴趣。首先提出问题,接着通过范例程序解决问题,给学生一个直观印象。之后教师并没有直接一句一句讲解程序,而是展示部分程序,隐藏了重点的自定义函数,通过这种“黑箱”操作使学生产生求知欲,增强了学生的兴趣。“黑箱”使得任务非常明确,这有利于学生将注意力集中在递归算法上,也有利于学生在课堂内掌握。

教材中要求学生对递归法进行客观评价,教师并没有直接灌输,而通过进一步设疑,提出另一种解决问题的方法,再通过两种方法的比较,使学生自己能够客观分析递归法,了解其 特点。 对学生不能发现的特点,教师再加以补充,这样既全面地掌握了知识,体验了过程,又发挥了学生的自主性,锻炼了评价算法的能力。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics