覃炜达
(河池学院数理学院 广西·河池 546300)
常规的教学方法就是直接对程序进行分析,讲解算法的执行步骤和原理,但是一些算法示例所涉及的函数结构比较复杂,并且在程序执行时需要多次重复调用函数。对于这样的示例,使用常规的教学方法,学生较难理解。因此,为提高该门课程的教学质量,王彦群、刘少兵、范昊等[1-3]针对该门课程的相应知识点分享了有关的教学方法,例如启发式实验教学方法、互动式教学等。
朱坤燕、谢剑峰、谭安军等使用局部到整体的思维方式对初中数学课程、初中Scratch、高中生物课程进行探讨,旨在让复杂的问题简单化,学生更易理解。本文使用局部到整体的思维方式对《算法设计与分析》中的求解数组最大值、次大值算法示例进行教学初步探究,并在实践教学中取得了一定的效果。
问题描述:对于给定的含有n元素的无序序列,求这个序列中最大和次大的两个不同的元素,具体参见文献[7]。
程序代码如下:


算法结构分析:
程序需要调用函数,且函数中有if…elseif…else语句,else语句有内嵌if…else,并且else语句还有两次重复调用递归函数。
由于算法结构复杂,主函数中数组元素个数较多,则函数重复调用次数就变多,导致学生不易理解算法的原理。如果数组元素减少,重复调用函数的次数就减少了,复杂的问题就变为简单了。为了让学生便于理解,教师在授课中可以把主函数中的数组元素个数取前面2个来分析算法原理(根据题意要找到数组中的最大值、次大值,所以数组的元素至少有2个)。……