面向高中生计算思维培养的迭代算法教学策略
2023-07-25曹香
曹香
摘要:本文主要针对当前高中信息技术课程中关于迭代算法教学中存在的诸多问题,结合高中生的认知特点,在迭代算法教学过程中聚焦教学策略进行实践研究,从而提出可视化抽象概念、分析结构提炼模型、循序渐进、错误中提升等教学策略。这些策略有助于教师提高课堂教学效率,有益于激发学生的学习兴趣,有利于提升学生的计算思维。
关键词:高中信息技术;迭代算法教学;计算思维
中图分类号:G434 文献标识码:A 论文编号:1674-2117(2023)14-0049-04
迭代算法是程序设计中的核心算法之一,它是利用计算机运算速度快、适合做重复性操作的特点,进行问题解决的一种方法,其在数值计算、图像处理、机器学习等方面有着广泛的应用。虽然学生在初中阶段也接触了一些算法,但对迭代涉及很少,而迭代在高中数学学科中也有许多应用,如等差数列、等比数列等数学概念,根据递推式求通项公式,牛顿二分法求方程的解等都是迭代思想的体现。因此,对于高中生来说,学习并掌握迭代算法有着重要意义。Python是一种简单易学的编程语言,下面,笔者以Python语言为例,探讨迭代算法的教学策略。
在过去的程序设计教学中,学生对迭代算法的理解存在许多困难,原因是多方面的:其一,迭代算法涉及一些数学和计算机科学的抽象概念,如迭代变量、累加、循環等,这些概念对于初学者来说不够直观,需要时间去理解。其二,虽然迭代算法可以用编程语言来实现,但其中涉及的数学知识需要一定的数学基础,如果学生数学水平较低,理解起来也会比较困难。其三,理解迭代算法还需要反复练习和实践,然而,高中信息技术课时有限,学生多半缺乏相关编程实践经验。上述种种因素的存在,使得高中生觉得迭代算法难学难懂。为了促进学生的学习,笔者搜集了许多关于迭代算法的资料,总结了一些教学策略,设计了一套针对高中生特点的教学策略,帮助他们更好地理解和掌握迭代算法。
可视化抽象概念的教学策略
迭代的概念和原理比较抽象,学生理解起来有难度,此时教师可以借助数字化工具,将概念和原理进行可视化,引导学生从感性上理解迭代原理。牛顿迭代法求平方根,是非常经典的迭代实例,高中数学教材中也很详细地介绍了牛顿迭代法求方程解的知识,教师可以直接引用此实例给学生讲解迭代的概念。为了让学生直观地看到迭代过程,可借助网络画板,将其求解过程制作成一个动画进行演示,内容如下:
利用牛顿迭代法求a的平方根,就是利用函数f(x)=x^2-a,求当f(x)=0时x的正数解。下页图1是网络画板求解过程中的演示截图。
首先,任意确定初始值x1(>0),然后将其代入函数f(x)=x^2-a中计算出函数值f(x1)。接下来,在点(x1,f(x1))处求出切线,并将切线与x轴相交得到新的迭代点x2。重复以上步骤,即可逐步逼近得到a的平方根。
通过上述演示分析,学生直观地学习了迭代原理和过程。同时,引导学生总结迭代算法的特点:①需要重复执行一定的步骤,以逐渐逼近所求结果。②迭代过程中后续计算结果会依赖于之前的值。
合理地使用数字化工具,将迭代过程可视化,可以帮助学生更直观地理解迭代算法的过程和原理,激发学生的学习兴趣,为后面编写迭代程序奠定基础。
分析结构提炼模型的教学策略
分析程序结构和提炼算法模型是编程教学中常用的教学策略。程序结构是指程序代码的组织形式和层次关系。算法模型是指将算法问题抽象为一个简单而通用的数学模型,从而更好地理解和应用该算法进行问题求解。
1.迭代算法程序结构
迭代算法程序通常包括以下三个部分:初始化—确定迭代计算的初值,如定义一个变量,并赋予其初值。迭代计算—重复执行的迭代计算式。终止条件—判断当前的计算结果是否满足所需要求,如果满足,则停止迭代计算并输出结果,否则继续迭代计算。
对应到具体程序中,以求解平方根为例,具体如图2所示。
2.迭代计算数学模型
在该算法结构中迭代计算部分是难点,笔者采用对迭代问题进行分类探讨的方式帮助学生突破该难点。对于高中生而言,需要运用迭代法解决的问题主要有以下三种类型。
(1)累加器更新迭代
对于数列求和、求乘积等问题,使用累加器或累乘器来记录中间结果,实现相应的计算。这类问题对应的迭代公式可总结如下:
s=s+an(求和)
s=s*an(求乘积)
此类问题的解决,首先引导学生分析数列中每一项的特点,找出通项公式an,接着根据以上的迭代公式得到迭代计算部分的代码。
(2)递推公式迭代
对于求数列中的某一项的问题,常常利用递推公式迭代法实现,迭代公式总结如下:
an=a*a(n-1)+b
这类问题的解决,需要分析数列中的每一项和前面项之间的关系,找出其中的递推算式,进而得到具体的迭代算式。高中生已经具备了一定的数学基础,只需做适当引导,便可找出数列的递推式。
(3)二分逼近迭代
对于求解函数零点、方程根、最大值等问题,常常采用二分逼近法,通过反复二分区间来逐步逼近精度较高的结果。对于高中学生而言,这类问题的迭代公式,一般会在题目中直接给出,迭代计算部分直接使用,学生只需设定合理的迭代初值,并设计恰当的迭代控制条件即可。
学生掌握了迭代算法基本模型之后,在编程实践中可以直接套用,提高了编程效率。分析程序结构和提炼算法模型教学策略不仅能够帮助学生建立深入的知识结构,还能够促进学生更好地掌握编程思想,提高编程技巧。
循序渐进的教学策略
为了让学生充分理解迭代算法的基本原理和实际应用,可以循序渐进地引导学生逐步完成学习任务。
1.从读到写逆向学习促进理解
对于初学编程的高中生而言,直接编写迭代程序有一定难度,可以让学生先从阅读程序开始,体验迭代执行过程,发现迭代变量的变化规律,理解迭代的运行逻辑,再要求他们编写程序。通过这种逆向学习的方式,可以帮助他们更快速地掌握迭代算法的基本知识,降低入门难度。
(1)阅读程序理解迭代过程
图3所示程序使用循环结构实现了对1到10的整数求和并输出结果。其中,sum=sum+i为迭代计算式,通过重复执行该迭代算式,最终实现了10个自然数之和的功能。学生在阅读该程序过程中,初步建立了迭代思维,为后面的学习打下基础。
(2)编程实践从修改程序入手
接下来的编程实践,可从修改程序开始,让学生参照图3所示的程序改写程序,实现下列功能:求和s=1+2+…+n;求阶乘s=1*2*…*n;求自然数倒数之和s=1+1/2+…+
1/n等。
学生通过改写发现这些问题之间的相似性,这种相似性表现在它们具有相同的程序结构,但是使用不同的迭代关系式。通过改变迭代关系式中的新增项公式,就可以从一个程序转变为另一个程序来解决不同的问题。
由读到写,从简单问题入手的循序渐进的模式,能够帮助学生逐步建立求解迭代问题知识体系,同时也增强了他们的学习兴趣和信心。
2.探讨经典问题助力思维提升
当具备了一定的迭代知识后,可将迭代算法融入到具体问题求解中,抛出一些有趣的经典问题,使学生能将所学的计算思维和编程技能应用到现实问题中。
案例一:通过观看视频《神奇的π》,激发学生对π的值产生兴趣,并且了解到π可以通过多种方法求解。
π=4(……);(莱布尼茨级数)
……;
……
以上是两种求π的近似值的方法,这些公式看起来很复杂,但是用迭代思想可以化复杂为简单逐步解决。
首先,分析其中一项的特点,以及它与前一项之间的关系或变化规律,得到这一项的通项公式或递推公式;其次,构建循环来完成整个式子的计算;最后,根据算法模型编写程序。这里可以将两个程序代码进行对比,让学生发现它们的算法结构都一样,唯一的区别就是通项公式不一样,代码如下表所示。
寻找通项公式或递推公式是求解以上问题的难点,此处教师可适当引导学生进行自主探究,让学生通过逐项对比,推导出最终的算式。学生在探究问题的过程中形成解決问题的逻辑思维。
案例二:由斐波那契的兔子问题探究斐波那契数列的前后项之比。
斐波那契的兔子是一个有趣的问题,它源于意大利数学家斐波那契的名著《算法之书》中提出的一个假设:“如果一对兔子从出生后第三个月起每个月都能生一对小兔子,并且新生的小兔子也会按照同样的规律成长和繁殖,那么一年内可以繁殖多少对兔子?”
根据问题分析兔子的繁殖规律:本月兔子对数=本月大兔子对数+本月小兔子对数;本月大兔子对数=上月兔子对数;本月小兔子对数=上上月兔子对数。
因此本月兔子的数量为:本月兔子对数=上月兔子对数+上上月兔子对数。
通过分析每个月兔子的数量,得到了著名的斐波那契数列:1,1,2,3,5……其前两项为1,从第三项开始,每一项都等于前两项之和。
有了每一项和前面项之间的递推公式之后,运用迭代算法编写程序计算出每一项的值,代码如图4所示。
在计算出斐波那契数列的每一项值后,开始探索数列相邻两项之比,并让学生观察其中的规律。
在探讨上述问题的过程中,学生可能会发现,求前后两项之比,需要两次执行上述代码,为了避免代码重复,这里可以考虑引入函数的概念,并通过调用函数来求比值。最后经过程序运行测试,学生惊喜地发现,相邻两项之比随着项数的增加逐渐趋近于黄金比例(约为1.61803398875)。
通过这些有趣的数学问题的探讨,激发了学生的学习兴趣,加强了学生的逻辑推理与思考能力,帮助他们更好地理解算法与实际问题之间的联系,培养他们迁移应用所学知识的能力。
错误中提升的教学策略
在编程学习过程中,学生会遇到各种错误和问题,教师需要及时给予指导和解决方案,鼓励学生阅读报错提示,分析错误原因,正确调试运行程序。引导学生从错误中学习,于错误中反思。对于迭代算法,学生易出的问题除了基本语法错误外,还有算法错误和逻辑错误,大致有以下几个方面。
一是迭代初值的选择。迭代算法的初值是其计算的起点,需要根据实际情况进行选择。良好的初值可以加快算法的收敛速度,但错误的初始值可能会导致迭代失败。例如,在求解阶乘问题时,初始值不能设为0。在获得迭代解之后,需要提醒学生进行算法验证以确保解的正确性。
二是程序死循环。这种错误属于逻辑错误,由于迭代是一种循环,for语句的迭代次数可控,一般不容易发生这种问题。而在使用while语句时,必须正确设置终止条件,否则就会陷入死循环。遇到此类问题,需要引导学生检查while语句后面的迭代结束条件是否正确,同时也要检查在循环体内的代码是否正确,以确保循环条件能够在一定的时间范围内被满足。
总结迭代算法易错点,可以帮助学生找到解决错误的方法,鼓励学生自我纠错,得到正确的程序运行结果。引导学生在错误中提升,不仅可以激发他们的内在动力,提高学生编程实践的能力和水平,还可以培养学生独立思考和解决问题的能力。
结束语
笔者根据高中生认知特点和学习需求总结出的一系列教学策略,都是基于计算思维和迭代算法的理论和实践,目的是帮助学生从感性到理性、从简单到复杂、从错误到正确地理解和掌握迭代算法,并且能够将其运用到解决实际问题中。本文提及的教学策略也可以应用到整个程序设计教学中,帮助学生更好地学习程序设计知识,提高计算机编程能力,培养计算思维。
参考文献:
[1]李盼盼,张维,曾鑫耀,等.基于布鲁姆教育目标分类的计算思维核心要素测评框架构建[J].软件导刊,2023(02):160-165.
[2]郑兴航.从解决数学问题出发认识计算思维[J].中国信息技术教育,2023(02):40-43.