在《信息技术选修——算法与程序设计》中,学生普遍认为递归算法有一定的难度。对于递归的思想,其实从“从前有座山,山上有座庙”中学生已经有一点点了解,但把递归的思想运用到程序设计中,来解决一些问题,对于学生来说,还是有一定的难度的。但我想,只要采用合适的案例引入,让学生自己实践,通过讲解,可以把递归变得简单。
一、合适的案例引入,了解递归
在广东版的递归算法中,采用的案例引入是斐波那契的兔子问题引入的。我觉得这个案例可以用于第二个案例来讲解。我讲这节课时,是用递归计算n!作为引入案例。我是这样来分析这个问题的:
学生通过数学知识可知:
n!=n*(n-1)*(n-2)*……*3*2*1,
而(n-1)*(n-2)*……*3*2*1又可以写成(n-1)!,
所以n!又可以写成n!=1,当n=0时,
n!=n*(n-1)!,当n>0时。
期刊文章分类查询,尽在期刊图书馆
根据公式,可以将求n!的问题变成求(n-1)!的问题,因为当(n-1)!求出以后,再乘以n就是n!,而求(n-1)!的问题,又可以变成求(n-2)!的问题,求(n-2)!的问题又可以变成求(n-3)!的问题,如此继续,直到最后变成求0!的问题,而根据公式,0!=1,再反过来求出1!,2!,……(n-1)!,n!。
递归的思想是直接或间接地调用自身的算法,调用自身算法的目的是把一个比较大的问题,层层转化为一个与原问题相类似、规模较小的问题,即n的问题化成(n-1)的问题,一直化到递归的出口,即1的问题,从而得到原问题的解。
二、动手实践,亲自体会递归的调用
在讲汉诺塔的问题时,可以从网上找到汉诺塔的小游戏让学生来做,刚开始,可以试三个盘子,三个盘子成功后,可以试4个,这样不断地往上加。在玩这个小游戏的同时,学生能体会到,随着盘子不断地增加,移动的次数也不断地在增加。3个盘子时只需要移动7次就可以了,4个时,增加到15次,5个时31次,6个时是63次,7个127次,8个255次,9个511次等等,学生玩到5个左右时,基本上都会找到盘子的移动规律了,这样,更能加深理解递归的调用。
三、拓展延伸,深层分析算法,用递归来解决问题
学生掌握了递归的思想、算法和调用过程后,可以给学生提供一些需要分析问题,设计算法来解决的问题。
通过拓展延伸,让学生意识到,用递归可以解决很多复杂的问题但不需要很复杂的步骤。同时,也要向学生说明,并不是所有的问题都可以用递归来解决的。
论文作者:王金萍
论文发表刊物:《素质教育》2017年11月总第253期
论文发表时间:2017/12/19
标签:递归论文; 算法论文; 学生论文; 盘子论文; 案例论文; 求出论文; 又可论文; 《素质教育》2017年11月总第253期论文;