热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

教学方法设计,问题式教学模式设计

转载:http:blog.sina.com.cnsblog_c1f95fa10102wv7q.html原载于《中国信息技术教育》2017年第9期江苏省大丰高级中学听话的鸡


转载: http://blog.Sina.com.cn/s/blog _ c1f 95fa 10102 w v7q.html


刊登在《中国信息技术教育》 2017年第9期


江苏大丰高级中学听话鸡


江苏省盐城市教育科学研究院的精髓来了


一、学习者分析


这门课的对象是高二学生。 这个阶段的学生有很强的自主意识,有一定的探索能力,喜欢通过自己的动手实践获得新的知识。 多次经历从问题到程序的思考过程,在遇到现有软件无法解决的问题时可以编写程序解决问题。 到目前为止,学生已经掌握了循环、数组和自定义函数的使用,为本课的学习做好了充分的准备。


二、学习内容分析


《用递归法解决问题》是高中选修教材《算法与程序设计》 (科教版)第三章《算法的程序实现》第五小节的内容。 在这门课学习之前,学生已经学会了用循环的方法解决问题。 但是,循环的方法往往不那么明确地描述解决问题的步骤,递归定律可以非常坦率地描述求解一个问题的过程,所以递归法也是最被考虑和最容易实现的算法。


递归的基本思想是把规模大的问题变换成规模小的相似子问题来解决。 实现函数时,可能会调用它本身,因为解决大问题的方法和解决小问题的方法通常是相同的。 递归通过在系统堆栈中存储函数中的局部变量来解决问题。 由于函数调用的开销,递归常常带来效率问题。 在这门课上,不仅要学习用递归法解决问题,更重要的是理解递归思想的精髓。 递归思想是计算机学科中的核心技术思想之一,其本质反映了简化复杂问题的思路。


三.学习目标


通过理解递归含义,可以找到缩小递归问题中的问题规模的递归处理方法和递归结束条件,并理解递归算法的优缺点


用程序实现递归算法,学习如何用简单的模式解决复杂的问题


了解递归思想,体验递归思想在生活实际中的应用。


四、教育重大难点


教学重点:递归退出条件分析,如何缩小问题规模,实现递归算法程序


教学难点:递归算法的程序实现


五.教育战略


呈现斐波那契数列问题,由学生熟悉的推送方法入手,针对问题描述中的不严格之处引入递归定义及其关键因素——递归终止条件和缩小问题规模的递归处理。 在递归学习过程中,学生通过读码、尝试模仿、归纳提取、拓展应用等环节完成知识内化,达到应用、迁移的目的。 最后通过实践比较,让学生体验递归、递归两种方法的执行效率,分析递归法执行效率低下的原因,学会辩证地看待问题。 在应用递归思想时,学习逐渐形成意识的——编程,不仅是编程解决问题,更重要的是形成正确的解决问题的方法和态度。


六.教育过程


(一)呈现问题,初识递进


一家电子购物平台迎来15周年,特别推出了积分签到活动。 活动的具体规则如下。 6月1日至6月15日,第一天、第二天签到均可领取一个积分,第三天签到可领取两个积分,第四天签到可领取三个积分,第五天签到……对了,wrdzxc从6月1日开始每天都在报名,6月15日她能拿到多少积分? 你能找到这15天每天收到的积分的关系吗?


教学设计图1积分领取情况


看图1,第一天和第二天只有一个点。 从第3天到第15天,每天收到的积分数进入重复计算过程。 也就是说,每天收到的积分是两天前的积分之和。 为了存储每天接收的点数,可以定义fib(1)=1,fib () )=1的数组,从第3天开始的重复利用循环进行。 代码如下。


dimfib(15 ) asintegerfib(1)=1Fib(2)2)=1For i=3 To 15 Fib(i ) I )=fib(I-1 )=fib(I-1 ) nextiprintfib ) 115 解决这个问题的方式我们称为推送法。 但是,在说明这个小组的数量时使用了“……”。 数学中经常看到这种写法,但实际上这种写法不科学,数学表达中常见的不准确。 因为它的含义取决于对省略号的理解和共识。 因此,斐波那契数列也可以定义如下。


这种定义方式把问题分为两种情况,一种可以直接求结果; 另一个是将问题分解成规模更小、解法与原问题相同的小问题。 在实现函数时,函数可能会调用自身,因为解决大问题的方法和解决小问题的方法通常是相同的。 这叫做递归法。 递归通常以自定义函数的形式实现。 这样,求斐波那契数列就变得非常简单了。


私有金融工具(byvalnasinteger ) as integer IFN=1orn=2then fib=1else fib=fib (n-1 ) fib ) n-2 )最终反馈函数

入递归的概念,并给出对应的递归程序代码,便于学生理解递归代码并深刻感受到递归法描述问题的简洁、直白。

(二)模仿尝试,体验递归

活动1:请大家模仿上例,分别完善程序,尝试用递归法解决下面三个问题。

(1)求阶乘。阶乘的递归定义:

Private Function f( ByVal n As Integer) As Integer If Then Else f=f(n-1)*n End IfEnd Function

(2)计算年龄:有5个人坐在一起,wrdzx问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2个人大2岁……一直问到第1个人,他说自己10岁。你能帮wrdzx算出第5个人多少岁吗?

递归定义:

Private Function age( ByVal n As Integer) As Integer If n=1 Then age= 10 Else End IfEnd Function

(3)汉诺塔:如图2,你能借助②号杆将①号杆上的盘子移动到③号杆上而不改变盘子的次序吗?最少移动多少次?移动规则:每次只能移动一个盘子,大盘不能放置在小盘之上。


图2 汉诺塔

释疑:可将n-1个盘子进行捆绑,那么整个移动过程便“简化”为“三步”:

(1)将这n-1个盘子从①移动到②,需要hanoi(n-1)次;

(2)将剩下的最后一个大盘移动到③,需要1次;

(3)将②上的n-1个盘子移动到③,又需要hanoi(n-1)次。

因此,可通过如下的递归定义来缩小问题规模:


Private Function hanoi(ByVal n As Integer) As long

End Function

展示学生程序,调试运行并分析其缩小问题规模的递归处理办法和递归结束条件,以及函数调用方式。

设计意图:以半成品代码填空的方式,有目的地将代码的核心部分留白,引导学生从不同角度进行模仿,尝试使用递归的方法解决问题。

(三)归纳提升,认识递归

通过实践,我们可以总结出递归实现的基本模式如下(以斐波那契数列的递归程序为例):

Private Function Fib(ByVal n As Integer) As Integer If n = 1 Or n = 2 Then 递归结束条件 Fib = 1 直接求解 Else Fib = Fib(n - 1) + Fib(n - 2) 缩小规模,递归处理 End IfEnd Function

小结:(1)递归法通过自定义函数来实现;(2)函数体内通过分支来判断是否满足递归结束条件,不满足则进一步缩小规模,递归处理。

设计意图:进一步归纳总结,对所学知识进行提炼,逐步形成递归解决问题的基本模式。这种通过具体的语言、算法中发现的解决问题的规律进行提炼,更加有助于学生对知识进行内化,并能够将此规律运用于解决新的问题,从而真正达到应用、迁移的目的。

(四)实例拓展,应用递归

掌握了递归法解决问题的一般格式,学会分析递归结束条件和缩小问题规模的表达式后,我们可以利用递归法来解决一些问题了。

活动2:求两个数的最大公约数。辗转相除法,又名jsdgb算法(Euclidean algorithm),是求两个正整数的最大公约数的算法。设两数为a、b (a>b),求a和b最大公约数gcd(a,b)的步骤如下:r1=a mod b(r1≥0)。如果r1=0,则gcd(a,b)=b;如果r1<>0,则r2=b mod r1 (r2≥0)。如果r2=0,则gcd(a,b)=r1,若r2<>0,则继续用r1除以r2,……如此重复求除数与余数的余数,直到能整除为止。

递归定义:

Private Function gcd(ByVal a As Integer,b as integer) As integer

End Function

提示学生分析递归结束条件和如何缩小问题规模,注意递归函数的书写形式。

设计意图:学以致用,利用学生熟悉的数学问题以降低学习的难度。活动2与活动1相比,其难点在于函数的参数变成了两个,在学生分析问题时教师应当给予适当的引导。

(五)实验比较,再认递归

活动3:递推法和递归法的实验比较。

(1)用递推和递归分别求Fib数列的第15、25、35个数,测试大致运行的时间,比较两种算法的效率。
| 算法 | 15 | 25 | 35 |
| ------------- |:-------------? -----?
| 递推 |
| 递归 |

(2)分析原因。以Fib(5)的计算情况为例,尝试完成图3所示的调用关系,直至递归结束。


图3 Fib(5)计算中的函数调用情况

通过这幅图我们发现在程序运行过程中存在着大量重复的函数调用,且参数越小,调用次数越多。正因为大量重复的调用,递归函数的使用相当耗费计算机资源,运行效率较低。

递归法虽然运行效率较低,但它的程序结构清晰、易懂,是循环无法替代的。不仅如此,递归思想反映出的一种跳跃性的思维方法也为我们打开了解决问题的全新思路。递归思想启迪我们要善于发现事物的整体与局部间的规律,学会从不同的视角去理解问题的整体和局部。

在我们的学习、生活中也存在着很多递归思想的应用。如图4的用递归法来绘制分形图。

图4 递归分形图

在生命科学中,当以不同的放大倍数观察小肠结构时,从左到右较大的形态与较小的形态之间存在着自相似,如图5。

图5 人体小肠的自相似结构

设计意图:通过实践对比,学生感悟到递归的运行效率的问题及其运行效率低下的成因。虽然递归运行效率不高,但其跳跃性的思维方式,用简单模式解决复杂问题的思想却广泛的存在于程序设计乃至其他学科中。通过本环节,实现了基础知识到思想方法的提升。

评析:长期以来,我国中小学教育非常注重“双基”,然而,随着时代的发展和知识的激增,基础知识和基本可能很快就会老化、过时,无法构成学生未来发展的基础,反之,学生在一门课程学习中形成的相对稳定的思考问题、解决问题的思维方法和价值观——学科思维,则会伴随学生终身。起源于计算机科学的计算思维,不仅是运用计算机科学求解问题的方式,更是理解世界的方式,甚至是做事的方式、探究的方式、协作的方式,充分彰显了基础教育课程的基础性特征,从而构成了信息技术课程思想的完整体系。

作为计算思维的一种关键思想,递归首先是一种解决问题的方式,其核心是按照一定的规则不断缩小问题规模直至递归结束条件出现,关键是要从整体上把握,通过“递”把主问题分解火星上的野狼问题,而“归”就是利用子问题的解逐步向上求解,根据这样的思路可以利用相对简单的方法来解决复杂的问题。本节课十分注重引导学生构造问题的递归定义,寻找到了递归定义,基本上就可以直接翻译成程序了。求斐波那契数列、阶乘和汉诺塔三个问题,由老师直接给出递归定义,而求最大公约数则在算法分析的基础上引导学生自主尝试定义递归。进而拓展到分形图的绘制,生命科学中具有分形特征的小肠结构,引导学生运用递归思想发现事物的整体与局部间的规律,体会递归思想在社会意义和教育意义上的普遍价值。

另外,程序设计具有强烈的工程属性,对同一问题常会得到许多合理而正确的不同程序。在寻找可能解决方案时,需要对各种方案做出评价和选择,对所做选择的优点和缺点应有清醒认识。这一点在递归程序设计中体现得尤为明显,递归描述的程序很容易阅读和理解,却也有一个本质性的缺陷,其中可能存在着大量的重复计算,许多学生可能认为,今天的计算机这么快,多算几次花不了多少时。通过试验,对比递推法和递归法计算不同数值斐波那契数列所耗费的时间,提高了学生对计算“复杂性”的认识。

当前,我们程序设计教学中“个性化”方法比较严重,同一个算法在不同问题中的描述往往是不同的,学生即使编写了“大量”的程序,也无法迁移到相似问题的解决过程之中。本节课通过对多个“个”别程序的归纳,形成递归解决问题的基本模式,并推广到更广泛的问题解决与应用中,这种基于模式建构的程序设计学习有助于建立良好的程序设计思维和方法,也有助于学生对知识进行内化。

(点评人:江苏省盐城市教育科学研究院潇洒的缘分来)

本文系江苏省教育科学“十二五”规划2015年度课题“基于活动理论的信息技术教学设计研究”(项目编号:D/2015/02/405)研究成果。


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
author-avatar
我财我乐汽车869
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有