学生已经学习了自定义函数和自定义过程的基本知识,了解了什么是递归法,本次课的基本内容是学习斐波那契数列的递归算法,了解递归算法的特点。
【教学过程】
环节
教师活动
学生活动
设计意图
观看
范例
设疑
提出兔子问题
展示范例:运行程序,察看结果(见附录1)
展示部分程序(见附录2)
提出问题,程序的核心根据月份intmMont计算新兔子个数的自定义函数recursion(intMonth)怎么编写的呢
观察范例
思考程序
写出自定义函数的框架结构
激发兴趣,明确任务
问题
引导:图解兔子问题
……
Recursion(intmonth)=
Recursion(intmonth-1)+
Recursion(intmonth-2)
分析
intmonth〉2时,计算的值是通过多次调用自身函数实现的,这就是一种递归
思考
……
巩固递归思想
分析任务,为编程做准备
编程
尝试
对学生分组,两人一组
指导
教师总结,图解递归过程
小组讨论如何实现
补充自定义函数
验证程序
再次体验递归过程
让学生体验递归程序的编程
拓宽
方法
如果不用递归法解决问题,可以用其他方法吗?
我们已经抽取了数学模型,因此可用解析法
讲解程序
浏览书上的程序,思考不同参数时程序运行过程
体会递归法不是唯一方法,其他方法也能解决问题
比较
讨论
这两种方法解决了同一问题,将这两种方法比较一下,概括递归法的特点。
教师做补充
学生积极讨论,提出:程序短,结构清晰,可读性强。
比较这两种方法,体会递归法的特点
附录2:部分程序代码张义兵评析:
学生都是有好奇心的,本案例利用学生的好奇心,采用“黑箱”操作调动学生的兴趣。首先提出问题,接着通过范例程序解决问题,给学生一个直观印象。之后教师并没有直接一句一句讲解程序,而是展示部分程序,隐藏了重点的自定义函数,通过这种“黑箱”操作使学生产生不满足感,增强了学生的兴趣。“黑箱”使得任务非常明确,这有利于学生集中注意力于递归算法,也有利于学生在课上时间对它的掌握,节省了时间。
要求学生掌握对递归法客观评价,教师也没有直接灌输,而采用了进一步设疑,提出另一种解决问题的方法,再通过两种方法的比较,使学生自己能够客观分析递归法的特点,对学生不能发现的,教师再加以补充,这样既全面地掌握了知识,体验了过程,而且发挥了学生的自主性,锻炼了评价算法的眼光。
教师还可以利用兔子问题创设情境,引导学生分析斐波那契数列,再提出要编程的问题。案例中采用的是先讲解递归法,再讲解解析法,教师完全可以将二者变换顺序,先引导学生用解析法解决问题,再讲解递归法,不管什么顺序,关键明确解析法是为了和递归法进行比较。对学有余力的学生,可以让他们完成整个程序的编程,而不仅仅是“黑箱”部分,甚至教师提出对程序进一步优化的要求,让他们去完成。