迭代算法教学记录和反思

分类: 研究-学习 |
教材4.2节《数值计算》的第二部分是用迭代法计算斐波那契数列。
对于这个迭代法我一开始也有点晕,虽然去年暑假时还跟着网上的同行学习了递归、递推和迭代的综合应用,但再看到斐波那契数列时,我首先想到的还是递归算法-f(n)=f(n-1)+f(n-2)。。看来还得再从头复习一下迭代了。
我又翻看了之前的blog记录,发现原来这种100以内的累加 s=s+i也是属于迭代的一种。
再稍微复杂一点的就是猴子吃桃子问题:第一天吃了一堆桃子的一半,又多吃了一个;第二天吃了剩下桃子的一半多一个,第三天、第四天都是如此,直到第N天还剩一只桃子。问第一天一共有多少桃子?
这也是一种迭代,最后一天是1只,那么前一天就是(1+1)*2=4只,再前一天是(4+1)*2=10只。。。公式就是s=(s+1)*2,最后求出第一天的桃子数量。
接下来在这个基础上介绍斐波那契数列(兔子数列:1,1,2,3,5,8,13,21.。。。)
有些同学第一次接触,对这个规则还不是很熟悉,这时就带着学生一起根据题目的意思在表格中一个个数据进行推理。最终达到:让学生明白后一个月的数据是前两个月数目之和,同时前几个月的最终数据也有所了解。
接下来就通过excel表格的形式,带领学生思考,如果要让计算机通过运行程序进行计算,该如何实现呢?
如果将第一个月的数值(1)用变量f1表示,第二个月数值(1)用变量f2表示,通过前两月之和等于第三月数目的规则,第三个月就可以用f1+f2来表示,进一步提问--那第四个月呢?学生很容易想到用第二个月的f2加上第三个月的f1+f2,这样结果就会是f1+2*f2。这时提醒同学们,此时很难找出相关的规律,计算机不太适合做此类运算。
我们还是联想到程序设计中循环效率高的思路。将第四个月的值也用f1+f2表示,此时,相应的要将2月的数值变量设置为f1,三月的设置为f2,纵向来看,就是将上一轮循环的f2的值赋给这一轮的f1变量,上一轮的f1+f2值赋给这一轮的f2,这样计算出后一个月的结果就可以一直用f1+f2来表示,在python中可以表示为f1,f2=f2,f1+f2【此时顺便介绍给学生同时赋值的python知识:a,b=2,3
,则a的值为2,b的值为3】
学生有了这样的认识之后,再呈现出迭代法求斐波那契数列的完整程序代码,让学生对照着在自己的计算机中输入并运行,体验迭代法求斐波那契数列的过程。
在这个过程中提醒学生修改月份数值,比如更改为m=120(120个月,10年),计算机瞬间算出一个很大的数值,学生肯定会非常惊讶。
最后时间允许的话,再介绍一下辗转相除法求最大公约数的过程和详细代码,让学生在模仿誊抄代码中慢慢了解程序运行的过程和机理。
这就是我一开始的课堂教学设计。
1
前一篇:最大公约数--常看常新