林温阳
摘要:本文以Python递归函数应用教学为例,深入剖析可操作的计算思维培养路径,尝试构建“设疑启思→导疑定向→议疑探究→析疑整合→质疑创新”(IVECI)极简五环课堂教学模式,开展面向计算思维培养的教学实践,以期为高中信息技术学科计算思维培养提供参考。
关键词:计算思维;信息技术;递归算法;教学模式
中图分类号:G434 文献标识码:A 论文编号:1674-2117(2024)10-0039-04
计算思维的概念与内涵
计算思维是运用计算机科学的基本概念进行问题求解、系统设计、人类行为理解等涵盖计算机科学之广度的一系列思维活动,其作为解决复杂问题的一种独特思想方法,具有形式化、模块化、系统化、自动化等特点。计算思维综合了数学思维、工程思维和科学思维,强调基于计算和创新的思维,其本质是抽象(Abstract)、模拟(Imitation)与自动化(Automation)。[1]《普通高中信息技术课程标准(2017年版2020年修订)》(以下简称“新课标”)也明确指出计算思维是个体运用计算机科学领域的思想方法形成解决方案而产生的一系列思维活动。培养计算思维就是让学生能够采用计算机可以处理的方式进行问题界定、建立模型、设计算法来解决问题,并达成学习迁移。
从计算思维的视角辨析递归经典案例
计算思维培养可以分解为三个基本步骤:首先,抽象建模,将待求解的问题抽象成一个概念模型;其次,问题分解,把复杂问题拆分成若干简单子问题;最后,设计算法,清晰地陈述解决问题的指令顺序,编程实现复杂问题的抽象、模拟和自动化。以Python语言为例,下列情况通常会考虑使用递归求解:①递归式定义,如求n的阶乘、杨辉三角等;②递归式数据结构,如链表、树、图等;③递归式经典问题,如汉诺塔(Hanoi)问题、N皇后问题等。
案例1:递归求阶乘和绘制分形树(入门)。
使用Python语言求阶乘的方法很多,这是一个很好的递归入门引例。自定义求n!的递归函数,fact(n)是调用者,函数内部fact(n-1)是被调用者,以此类推。整个递归调用过程如下页图1所示。在情境导课中,使用Python的Turtle库编写代码v绘制分形树,轻松实现递归算法可视化(如下页图2)。
案例2:青蛙跳台阶问题(简单)。
情境问题:一只青蛙要跳上20级台阶,每次只能跳1级或2级,问有多少种跳法?
问题分析:青蛙既然一次能跳1级或2级台阶,那么跳上N级台阶的方法是:先跳上N-1级台阶,再跳1级即可,或者先跳上N-2级台阶,再跳2级亦可。因此,跳上N级台阶的方法总数=跳上N-1级台阶的方法数+跳上N-2级台阶的方法数。假定Jump(i)表示跳上i级台阶的方法数,则递推式为Jump(N)=Jump(N-1)+Jump(N-2),而递归终止条件为Jump(1)=1,Jump(2)=2。事实上,这是一个斐波那契(Fibonacci)数列。当然,若是使用排列组合方法,亦可得到结果为:种。
案例3:汉诺塔(Hanoi)问题(中等)。
情境问题:相传古印度大梵天在创世时,做了3根金刚石柱,在A柱自下而上、由大到小摞有64个圆盘,他让婆罗门把圆盘全部转移到C柱上,要求每次只能移动一个圆盘,而且始终保持大盘在下、小盘在上。问至少需要移动多少次?
问题解析:①当n=1时,直接把圆盘从A柱移到C柱;②当n>1时,先将A柱上的(n-1)个圆盘通过C柱移到B柱;③接着把A柱上编号为n的圆盘移到C柱;④最后将B柱上的(n-1)个圆盘通过A柱移到C柱,递归结束。最终显示移动n个圆盘至少需要2n-1次。
案例4:路边随机停车问题(较难)。
情境问题:一条马路长度为5,问平均能停多少辆长度为1的汽车?
问题分析:①将停车区域起点定为start,终点定为end,最初停车区域end-start=5;②如果end-start<1表示车位长度小于车长,就不能停车;③第一辆车A在start与end之间随机停放,停车起点范围为(start,end-1);④第二辆车B在A车停好后,有(start,x)和(x+1,end)两段可选的停车区域。接下来,分别调用自身,递归解决问题。假设用M(X)表示马路长度为X时停车数量的期望值,则马路最大空间利用率,公式如下。
案例5:八皇后问题(最难)。
情境问题:将八个皇后摆放在8×8的棋盘上,使之互不攻击,即在同一行、同一列或同一斜线上,最多只能有1个皇后,问共有多少种摆法?
问题分析:①首先定义一个棋盘上皇后位置为arr[R,C]、当前皇后摆放行为ROW、问题规模为N的递归函数;②遍历当前行每一列,逐列尝试摆放位置,若符合约束条件(不在同一行、同一列或同一斜线上),则将皇后置于此列,接着调用自身,转到下一行;③如果递归调用返回值为真,说明下一行的皇后找到了合适的位置,那么子问题的求解方法可行,当前皇后的摆放位置正确,此时如果全部摆放完毕,就算完成一种摆法;④如果递归调用返回值为假,则说明下一行的皇后找不到合适的位置,就需要回溯,把當前皇后右移一格再次尝试递归探索;⑤如果遍历完当前行所有列,下一行的皇后仍然找不到合适的位置,那就继续回溯直至某一行,甚至回溯到第一行,以寻找合适的摆放位置;⑥在主函数中从第一行开始尝试摆放第一个皇后,递归调用自身直到所有的皇后摆放完毕,最后输出结果。
面向计算思维培养提炼递归核心要义
上述递归算法经典案例分析,由易到难,分层设计学习任务,为学生提供适合其认知心理规律的多样化学习资源、认知工具和认知策略,促进学生深度学习递归、迭代、循环和遍历等程序设计策略,发展学生的高阶计算思维能力。
1.递归算法的基本原理
递归(Recursion)是通过不断调用自身实现程序在执行过程中对问题进行降维求解。递归作为一种重要的程序设计方法,能有效地解决复杂性问题,递归程序的底层逻辑是使用堆栈(Stack)—— 一种计算机科学中较为常见的抽象数据类型(ADT)。Python递归函数的格式如图3所示。
递归算法的工作原理是:当程序运行首次进入递归函数时,需要进行条件判断,符合终止条件则返回结果,不符合条件则调用自身进入函数内层。这种反复调用自身,自顶向下逐层展开,直至进入最小可求解子问题的过程即为“递”;待到内层函数执行完毕,由内向外步步回溯,直至返回最终结果的过程即为“归”。递归算法必须具备两个条件:一是存在终止条件,二是需要调用自己。二者缺一不可。需要说明的是,终止条件语句必须写在递归调用语句之前,否则会出现堆栈溢出,致使递归函数进入死循环。当然,递归函数的终止条件可以不止一个,递归调用也可以多个。递归算法的根本在于问题本身是否可以通过层层拆解到最小粒度来求解。
2.剖析递归算法的优点与不是
优点:递归通常是把一个大型的复杂问题拆分为多个子问题,拆分后的子问题除了數据规模变小,其解决思路和原问题完全一致。递归只关心向下一层的实现,而并不关心更下一层的细节,因此递归函数结构清晰、定义简单。递归在计算机领域被广泛应用,它不单是一种计算方法,更是一种思维方式。
不足:实现递归需要大量的PUSH(压栈)和POP(弹栈)操作,用于执行上下文的现场保存和现场恢复,其内存资源消耗远大于非递归函数调用,算法运行效率较低。过深的递归调用还可能出现堆栈溢出的情况,因此,编写递归代码需谨慎,务必设计好递归出口(终止条件),在必要时应该把递归算法转化为非递归算法。
以计算思维为主题进行逆向教学设计
传统教学以内容或活动为导向,因缺乏清晰的引导性思维目标和明确的表现性评价设计,学生难以真正地自主架构知识体系。威金斯和麦克泰格提出追求理解的教学设计理论(Understanding by Design,简称UbD),强调教学要“理解为先,由终定始”,帮助学生掌握知识、理解意义、实现迁移,以促进学生的可持续发展。[2]下面,笔者以Python递归函数应用为例,依据UbD即理解为先的教学理念进行逆向教学设计。
1.明确项目学习目标
依据新课标、教材要求和学生实际,重组信息技术学科教学内容,开发跨学科主题项目学习资源,挖掘其中的计算思维元素,设计项目学习目标(如上页表1)。[3]
2.制订学习评价标准
从项目学习目标出发,设计学生学习评价量表(过程性评价和结果性评价),考核学生的计算思维核心能力,如分解思维能力、抽象思维能力、算法思维能力等,关注学生的课堂学习行为表现,及时捕捉反映学生理解程度的行为数据,做好发展性学习评价,促进学生的综合素养全面发展。
3.设计项目学习活动
有研究表明,项目式学习+配对编程对计算思维培养效果显著。[4]这是发展学生计算思维的重要教学方法。笔者以Python递归函数应用教学为例,尝试构建“设疑启思→导疑定向→议疑探究→析疑整合→质疑创新”(IVECI)极简五环教学模式,精心设计课堂师生活动,并提供项目式学习资源与工具,在渐进性的问题推进和开放性配对编程中培养学生的计算思维(如上页表2)。
总结与展望
高中信息技术课堂是计算思维培养的主阵地,编程教育是培养学生计算思维能力的绝佳切入口。高中信息技术新版教材选用Python作为计算思维学习工具,用于计算思维培养,具有重要的实践价值和现实意义。上述递归算法的经典案例引导学生就实际问题进行抽象建模、设计算法、迭代改进等,为培养学生的计算思维提供了可操作的路径。
参考文献:
[1]周伟佳,王祖浩.科学教育中的计算思维:理论框架与课程设计[J].中国电化教育,2018(11):72-78.
[2]G.Wiggins & J.McTighe.追求理解的教学设计[M].闫寒冰,等,译.上海:华东师范大学出版社,2017.
[3]宿庆,张文兰,王海,等.面向高中生计算思维培养的信息技术课程项目式学习研究[J].电化教育研究,2022(08):109-115+122.
[4]马志强,刘亚琴.从项目式学习与配对编程到跨学科综合设计——基于2006-2019年国际K-12计算思维研究的元分析[J].远程教育杂志,2019(05):75-84.
本文系福建省教育科学“十四五”规划2023年度立项课题“双减背景下青年教师课堂教学行为诊断能力提升策略研究”(立项号:FJJKZX23-390)的研究成果之一。