基于计算思维的AppInventor递归算法教学
2017-05-30李霞
李霞
摘 要:教育部高教司已高度重视与支持,通过大学计算机基础教学,增强计算思维能力的培养。文章介绍了面向大一新生,用App Inventor进行递归算法的教学。教学过程中引导学生积极思考、培养学生发现问题、解决问题以及程序分析与调试的能力,从而达到逐步培养学生计算思维能力的目的。
关键词:计算思维;App Inventor;递归算法;大学计算机基础
中图分类号:G642 文献标志码:A 文章编号:2096-000X(2017)01-0077-02
Abstract: The Higher Education Department in the Ministry of Education has attached great importance to and provided support for the cultivation of computational thinking ability, through the teaching of basic computer courses in universities. This paper introduces the teaching of recursive algorithm to freshmen with App Inventor. In the teaching process, we should guide students to think actively and cultivate students' ability on discovering and solving problems as well as analyzing and debugging programs, in order to achieve the goal of gradually developing students' computational thinking ability.
Keywords: computational thinking; App Inventor; recursive algorithm; basic computer courses in universities
引言
我國九校聯盟(C9)在2010年联合发表了关于以计算思维改造大学计算机课程的联合声明,其核心要点就是强调“需要把培养学生的‘计算思维能力作为计算机基础教学的核心任务”[1]。培养学生的计算思维能力已经成为各高校各专业学生能力培养的重要组成部分。
目前,增强大学计算思维培养主要体现在“大学计算机基础”和“程序设计”相关课程上,有众多院校进行了探索和实践,并且也取得了一定的进展[2,3]。根据我校实际情况,向全校开设了面向计算思维培养的App Inventor移动应用开发的公选课程。递归算法在其他程序设计教学中一直是难点,但同时递归算法的教学是培养学生计算思维、分析问题、解决问题以及程序调试能力的好契机[4]。
一、App Inventor 简介
App Inventor是由Google委托麻省理工学院(MIT)研制的一款在线快速开发移动应用的工具,并把App Inventor定义为一种培养学习者计算思维能力的工具。学习者通过可视化语言来学习编程、学习设计问题解决方案以及培养自己的创造性思维。
App Inventor在移动应用开发方面具有如下特点。
(一)开发环境简单
App Inventor开发环境采用浏览器+云服务模式,所以不需要在本地安装配置复杂的软件,只需通过浏览器访问AI服务器,就可以完成开发和App打包下载工作。目前国内唯一的官方服务器是广州教育信息中心的服务器。源代码都是保存在服务器上,保证了代码的一致性和安全性,所以开发者可以在任何一台联网机器上进行开发[5]。
(二)简单、直观、可扩展
App Inventor采用模块化、图形化的编程方式,不需要掌握编程语言和复杂的语法规则,就可以开发出Android手机应用。App Inventor以手机作为载体 可以利用手机的传感器、蓝牙等功能,能方便地与外部设备实现链接,从而可以实现将实际问题解决与算法思想形成连结[6]。
(三)容易激发学生学习兴趣
根据手机内置的加速度传感器、方向传感器、GPS传感器以及摄像头、麦克风等学生可以发挥自己的想象、开发出具有特色的移动终端应用,学生可以实现自己的应用设想,从中获得成就感,从而进一步激发学生的学习动力和兴趣。
(四)调试程序方便
可以通过真机或者模拟器进行调试程序。具有单独运行指定模块或者禁用某些模块,可以使开发者更具体地了解某些模块的作用,从而及时做出调整。
二、App Inventor中递归算法的教学过程
(一)递归算法
在App Inventor移动应用实际开发过程中,会运用到模块之间直接或间接的调用,这种称为递归调用。递归算法在C/C++等程序设计语言教学过程中,是教学的难点[7]。学生存在递归难先入为主的情绪,而且还要掌握复杂的语法规则,而且调试过程中程序的跳转让学生晕头转向,从而教学效果不理想,也不能很好地达到培养学生计算思维的目标。而在App Inventor中,学生避免了掌握复杂的语法规则的学习过程,可以重点在透彻的理解算法、通过程序模块设计出程序,通过图形化的手机界面把程序的执行流程和结果更直观的展示出来。
(二)阶乘递归算法的实现与调试
在App Inventor中实现求阶乘的递归算法,首先要搭建一个应用界面:由2个标签,2个输入框以及1个按钮构成。该程序中通过触发按钮的点击事件,调用一个带参数的过程,来实现阶乘的求解。定义全局变量result来存放阶乘结果,通过逻辑模块判断参数值如果为1,则result值为1,否则result的值为递归调用n-1的阶乘乘以n。根据学生已有的学习基础以及递归流程图的分析,绝大多数学生能够正确实现程序。
程序虽然实现了,但从运行结果看,并没有体现出递归的执行流程,给人的感觉就是直接得出结果。这时候需要启发学生思考,如何将程序的求解过程在程序中展示出来,同时训练学生的文字表达和逻辑归纳总结能力,使学生学会分析问题、解决问题,进一步加深递归的理解[10,11]。
引导学生通过添加全局变量来表示递归调用的次序,然后分别输出相应次序产生的结果,以此验证程序的执行流程。这种对程序稍作修改增加输出语句的调试方式在许多商业软件的开发过程中也会经常使用到,可以增强学生排错以及调试程序的能力。在上述程序实现的基础上,增加1个标签来显示执行过程,编写求解过程模块,展示调用次序。通过展示完成的求解结果,学生就可以很好的将递归流程图和计算过程结合起来,达到充分理解递归的教学效果。
(三)阿克曼函数的递归实现
通过实现经典的阿克曼函数的递归求解,提升难度,加深递归的理解。学生在理解了递归求阶乘的基础上,再实现阿克曼函数难度要降低,但是阿克曼函数是递归调用过程中又嵌套了递归的调用。这时引导学生首先分析递归的结束条件,从公式中可以发现,递归结束条件为m值为0,然后鼓励学生尝试模仿画出A(2,2)的递归流程图,最后再实现邏辑代码。阿克曼函数公式如下所示。
A(m,n)n+1 若m=0A(m-1,i) 若m>0,且n=0A(m-1,A(m,n-1)) 若m>0且n>0
在该例的真机测试过程中,学生发现输入某些数据时,绝大多数运行会较慢,甚至死机。教师启发学生结合已有的数学知识去发现,当m值大于等于4时阿克曼函数的增长快得惊人。在该例中很好的将编程与数学知识相结合,并培养了学生分析问题的能力[12]。
三、结束语
文章通过“积木式拼接”的App Inventor移动应用开发工具,讲解了递归程序的实现以及如何进行程序的分析与调试,克服了学生递归难的畏难情绪,加深了递归的理解,培养了学生分析问题、解决问题的能力,在培养了学生计算思维的基础上,也为后续进一步学习编程语言打下了良好的基础。
参考文献
[1]何钦铭,陆汉权,冯博琴.计算机基础教学的核心任务是计算思维能力的培养[J].中国大学教学,2010(9):5-9.
[2]陸汉权,何钦铭,徐镜春.基于计算思维的“大学计算机基础”课程教学内容设计[J].中国大学教学,2012(9):55-58.
[3]李文生,吴舜歆.面向计算思维能力培养的程序设计课程[J].计算机教育,2014(3):57-60.
[4]罗铭.基于计算思维的软件类研究生高级算法课程教学研究[J].计算机教育,2016(7):92-95.
[5]吴明晖.面向计算思维的App Inventor课程建设与实践[J].杭州电子科技大学学报,2015(2):93-97.
[6]郭守超,周睿,邓常梅,等.基于App Inventor和计算思维的信息技术课堂教学研究[J].中国电化育,2014(3):91-96.
[7]申云成,赵莉,顾庆传.基于C语言的递归算法分析[J].福建电脑,2015(6):133-134.
[8]谭浩强.C程序设计教程[M].北京:清华大学出版社,2010:187-188.
[9]唐大仕.“递归算法”微课教学设计——以“文科计算机基础(下)”为例[J].计算机教育,2013(17):5-10.
[10]高思、赵博.C语言中递归算法的实现[J].数字技术与应用,2015(7):140.
[11]丁海燕.计算机程序设计课程中计算思维的培养[J].实验技术与管理,2015(12):16-18.
[12]赵龙德. 大学计算机课程中计算思维培养的层次和原则[J].计算机教育,2015(10):9-12.