“变式探究”在算法与程序设计教学中的应用

    季雁

    

    

    

    “变式探究”是教师在“变式教学”的基础上,根据学生的特点,通过创设合理的、有挑战性的问题变式,激发学生的探究兴趣,点燃学生内心探究的种子。通过“变式探究”,教师为学生的思维发展提供支架,有助于学生构建脉络清晰的知识。通过“变式探究”,教师有目的、有意识地引导学生从“变”的现象中发现“不变”的本质,从“不变”的本质中探究“变”的规律,真正做到融会贯通。本文笔者通过算法与程序设计教学的具体实践,归纳出层次型、发散型、逆向型、情境型、类比型的“变式探究”,呈现了“变式探究”对提高学生学习效率、提升学生思维品质等方面的效果与价值。

    ● “层次型”变式探究:跳一跳,摘到桃

    维果斯基的“最近发展区”理论中最经典的话语莫过于“跳一跳,摘到桃”。“最近发展区”是指“学生独立解决问题的实际水平与在教师指导下解决问题的潜在发展水平之间的差距”。“最近发展区”强调了教学的本质特征不在于训练和强化已形成的内部知识体系,而在于激发形成正处于成熟过程中而又未完全成熟的知识体系。因此,在教学中,要从学生的学习能力和思维特点出发,关注学生的需求,可采用“层次型”的变式来启发、引导,激发学生主动探究。

    教学阐析:循环语句是程序设计学习中的重点和难点,学生如何灵活应用循环语句来解决生活中的实际问题,如何找出这些问题的共性,并在解题过程中找出规律、提炼方法,是课堂教学所要突破的关键。如图1所示,首先,从一个简单又充分体现循环思想的问题入手,让学生认识For语句,理解循环的原理。然后,给出探究变式1和变式2,让学生自主完成值的计算。教师针对巡视中发现的问题进行释疑后,让学生完成变式3、变式4。在从变式1到变式4的认知过程中,大部分学生都能“跳一跳,摘到桃”,逐步熟悉For循环的结构并真正掌握其具体用法。“层次性”变式探究的学习过程,使学生真正实现自主地构建知识。

    ● “发散型”变式探究:一千个读者眼中有一千个哈姆雷特

    莎士比亚有句名言:“一千个读者眼中有一千个哈姆雷特”。也就是说,每个立场不同的人都可以在“哈姆雷特”这本书里看出完全不同的意境。笔者以为,这个道理用在算法与程序设计教学中也十分恰当。同一个问题,学生与学生、学生与教师之间往往也会因为知识储备、兴趣爱好、能力差异、思维特点等不同而产生多种变式。

    教学阐析:如图2所示,在学习双重循环这块内容时,首先通过平行四边形的打印让学生理解双层循环、tab()函数和print方法的用法,了解它们的具体功能。然后,让学生自由选择规则图形编写代码,从不同图形的打印代码中找出相同的规律,即:①外循环控制打印的行数;②tab()函数控制每行打印的位置;③内循环控制每行的打印个数。很多学生采用了不同的打印图案,甚至同一图案采用了多种方法。通过引导,学生展开自主探究,进行创造变式、解决变式,从而更深入地体会问题的异化、迁移,更好地把握问题不变的本质特征。“发散型”变式探究的学习过程,能有效培养学生思维的探索性和深刻性。

    ● “逆向型”变式探究:反其道而思之

    正向思维是指常规的、公认的、习惯的想法与做法。逆向思维则恰恰相反,是对传统、惯例、常识的挑战。循规蹈矩的思维和按传统方式解决问题虽然简单,但容易使思路僵化、刻板,摆脱不掉习惯的束缚,得到的往往是一些司空见惯的答案。逆向思维则能克服这一障碍,得到的答案往往出人意料,给人以耳目一新的感觉。有时候从思维的反方向开展“变式探究”,反其道而思之,往往能另辟蹊径,让人豁然开朗,对知识的灵活应用更为得心应手。

    教学阐析:教材中对冒泡排序的算法仅局限于自下而上的比较相邻两数。首先,学生通过数字实例的内、外循环变量跟踪,理解冒泡排序算法的基本思想,理清内、外循环变量之间的关系,基本掌握自下而上的升序排序代码。接着,笔者提出:如何实现自上而下的反向排序?学生通过小组合作的方式展开逆向探究,回忆自下而上的过程,反向抽取内、外循环变量之间的关系,从而得出变式,如下页图3所示。

    在算法与程序设计教学中,从问题的反面进行深入探索的例子还有很多。求解n的阶乘问题,正向的思路则是通过解析算法,找出问题的前提条件和所求结果之间的数学关系表达式,用循环结构得出问题的解。笔者通过启发学生开展“逆向型”变式探究,让学生使用递归算法,将大问题分割成小问题,通过已知的小问题逆推得出最终的解。“逆向型”变式探究解决算法中的问题,往往会有一条新奇的出路,使学生的思维更加灵活。

    ● “情境型”变式探究:一切知识都是从感官开始的

    “一切知识都是从感官开始的。”这是捷克教育家夸美纽斯在《大教学论》中的至理名言。陶行知也说过:“生活即教育。”课堂中问题的呈现要具有一定的生活情境,才能激起学生主动探究的热情和思考问题的积极性。尤其是在算法与程序设计教学中,教师更需要有目的地引入或创设情境,以激发学生的兴趣,提高学生对知识的记忆、理解和应用。学生从不同的情境变式中探究得出类似问题的统一解决方案,从多变到不变,思维的总结和概括能力得以提升。

    教学阐析:如图4所示,在讲授多条件的块if语句时,笔者选用了“田径运动员技术等级判定”问题作为实例,帮助学生认识if语句的语法及功能。虽然if语句理解起来较为简单,但在具体的上机实践中,学生往往错漏百出,需要相关的练习进行巩固。采用“情境型”变式探究,结合学生的生活实际,可以使枯燥的练习内容变得鲜活起来。学生展开热烈的讨论,归纳并总结了生活中可以用if语句解决的情境问题,以及具体的操作方式。运用“情境型”变式探究,从不同的问题背后抽取出相同的处理方式,学生真正感受到算法与程序设计的实用性、趣味性、生动性。

    ● “类比型”变式探究:他山之石,可以攻玉

    类比是一种重要的思维方法,在新旧知识间进行异中求同、同中求异。类比的过程是由此及彼、找寻问题的相似点或相异点的过程。“他山之石,可以攻玉”,“类比型”变式探究可以从一种问题的解决方法引申出更为优化的解决方法,由这种方法所得出的结论,既有模仿又有创新,是思维的升华,富有创造性,往往能给予学生许多启发。2015年选考试题第16题冒泡排序优化的改错题、2016年10月选考试题第16题冒泡排序数据的移动问题也涉及此类问题。

    教学阐析:如下页图5所示,在给出“百钱买百鸡”问题之前,学生已通过相关实例掌握了枚举算法的基本用法,并总结了枚举算法的常规解法,即问题有几个变量就采用几层循环,并在最内层循环中添加所有的条件。虽然这样的解法能解决问题,但却不是最优的算法。一个好的算法,很多时候需要考虑程序的执行效率。因此,笔者引导学生思考枚举算法解决问题的关键,从问题的范围、条件着手进行優化,学生顺利地得出了变式。然后,笔者将两种方法做类比,前者所需执行的循环为100×100×100次,判断条件为2个,而变式所需执行的循环为20×33=660次,判断条件为1个。通过这样的“类比型”变式探究,学生的思维得到了升华,在“孙子算经”问题中立马活学活用,顺利应用了优化的枚举算法变式来解决问题,使循环次数从500次减少到(500-9)/7次,条件从3个减少为2个。

    教学阐析:斐波那契序列、兔子数列以及类似其他数列的求解是算法中常见的、经典的问题。在学习递归算法以后,学生往往会有思维定式,千篇一律地采用递归算法来编程求解。因此,笔者提出了能否用解析的方法来解决斐波那契序列问题,学生很快通过数学关系表达式的求解,顺利得出了变式。接着,笔者让学生用n=35调试两种算法。学生惊喜地发现解析算法的机器反应快,递归算法明显迟钝。由此,笔者提出运行效率问题,让学生利用n=5进行递归函数的调用次数分析,得出结论:Fib(5)调用1次,Fib(4)调用1次,Fib(3)调用2次,Fib(2)调用3次,Fib(1)则需要调用5次。函数的多次调用造成大量的重复计算,从而使得递归算法的效率低下。通过类比,学生总结了解析算法和递归算法解决此类问题的优劣。“类比型”变式探究,拓宽了思维的广度,实现了有效拓展,学生深受启发,明确了遇到问题时应该综合考虑的方方面面,从而学会选择最优的算法来解决问题,如图6所示。

    综上所述,笔者以为,在算法与程序设计教学中开展“变式探究”,就是用有效的变式问题引导学生进行由表及里的深入探索,抽取问题的本质和核心,真正学会融会贯通,从而实现以“变”应“不变”,以“不变”应“万变”。有关变式探究问题的有效设计,需注意教学的目标导向性、学生的主体参与性,以及变式问题的适度性。