首页 > 文章中心 > 算法初步

算法初步

算法初步范文第1篇

【关键词】 《算法与初步》 算法与程序设计 教学

【中图分类号】 G42 【文献标识码】 A 【文章编号】 1006-5962(2012)11(a)-0132-01

算法与程序设计最终目的是为了解决实际问题?本文的学习目的是使学生在原有基础上进一步体验算法思想,了解算法和程序设计在解决问题过程中的地位和作用;能从简单问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序实现算法解决问题?

为此,笔者精选了平时生活和学习中经常用到的电子计时器进行教学?要求学生在一堂课内完成电子计时器的制作?如图1

在一堂课中,不但要让学生理解小时钟程序的制作算法思想,还要让学生掌握其程序的代码编写,的确难度不小?一般情况下,老师的讲解都是按正确的思路去执行的,而且在学生的习惯性思维中,通常教师是不会出错的?这次,在课堂上,笔者作出大胆尝试,故意出错,引起学生的注意,然后再加以分析,讲解出错的原因,寻找解决的办法,并引入新的知识难点全局变量?

解题步骤:

1 任务分析

编写模拟“电子计时器”的程序?

功能描述:(1)重置时间:就是把时间变为0,电子计时器暂时停止计时;(2)开始计时:就是电子计时器开始工作计时;(3)暂停计时:就是电子计时器暂时停止计时,但下次计时的时候,要从先前停的时间继续计时?

2 算法分

说明:等待时间到达,计时器控件自动完成“时间的增加”?

3 编程三步曲

(1)设计界面?修改对象属性:

添加一标签,修改Caption属性=0修改名称:Min

修改字体?字号属性

添加两个标签,修改Caption属性=:

修改Caption属性=0,修改名称:Sec

添加一计时器控件,修改Interval=1000(表示时间间隔是一秒钟)

(2)编写代码

编写计时器事件:

分析:定义变量T代表时间,单位:秒

每过1秒钟,电子计时器显示就要加l,而计时器控件每秒执行一次,因此,可以使用累加:T=T+1,由于T是秒数,当T>60时,必须转换成分钟数?变量M代表分钟数,S代表秒数。

尝试:

双击计时器控件,并输入代码:

Dim t As Integer,m As Integer,s As Integer

(板书)T=T+l 每执行一次累加1

M=T\60 T整除60得出分钟数

S=T Mod 60 T取模60得出秒数

Min.Caption=m 在标签l输出变量M的值

Sec.Caption=s 在标签3输出变量S的值

(3)调试运行

失败:电子计时器只显示l,就停下来,不动了,这是什么原因?

调试:尝试增加Ptint t;发现变量T的值总是l;对比:跟我们以前利用循环进行累加求和有所区别,(演示《循环变量的变化》)

发现:变量的定义,放在循环语句的外面,循环的执行不会把变量T初始化。

分析:这是因为变量T是在计时器控件中定义的,计时器控件每执行一次都把变量T初始化(即:T=O)

(4)解决办法:讲解全局变量(PowerPoint)全局变量是指在程序开头的说明部分(通用一一声明)定义和说明的量,其作用域是整个窗体程序?

把变量T定义为全局变量(“通用一一声明”事件:Dim tAs Integer),这样就不会被初始化?它只是在程序执行开始时初始化一次,不受其他控件影响?实践证明,在仅仅的一堂课中,100%的学生能够完成老师布置的必做练习,80%以上的学生能够完成选做题。经过老师的精心组织?巧妙安排收到了良好的效果,学生对于全局变量这一知识难点,完全掌握,并能理解?熟练运用?

参考文献

算法初步范文第2篇

1“整合”能有效检验算法的正确性与合理性

算法初步中赋值语句、输入、输出语句、条件语句、循环语句的教学,必须结合实例进行编程来说明各语句的作用,实践性、操作性强. 如果只是在黑板上编程教学,那无异是 “纸上谈兵”,学生体验不深,而且所编的程序有时自认为是正确的,但往往因为一个小的疏忽,而在计算机上不能运行通过或结果错误. 例如我在讲解循环语句时,在课堂练习中请学生先做了这样一道练习题,设计计算1×3×5×7×…×13的一个算法程序.对这道题大部分同学都能比较顺利地写出程序1:

程序1接着笔者提出如下问题,这个程序执行完共循环了多少次?能否修改程序使循环次数减少?学生A回答一共循环了7次,若将i=1改为i=3,则循环次数减少1次. 我接着追问,若交换s=s*i,i=i+2的先后顺序,输出的结果s的值是否变化?对于这个问题,学生中出现了不同的结论,经讨论后学生B举手回答,若交换s=s*i,i=i+2的先后顺序,输出的结果s的值将会改变,因为交换后当循环变量i=11时,循环一次后i=13,s的值已为1×3×5×7×…×13,由于此时i=13满足循环条件,再循环一次i=15,s的值已变为1×3×5×7×…×13×15. 这时我再在电脑上当场执行这两段程序,使学生信服地看到s=s*i,i=i+2的先后顺序不能随意交换. 在讲评完这道题后,我又给出了如下一道变式题让学生练习,设计求满足条件1×3×5×7×…>135135的最小整数的一个算法程序. 请学生思考这道题与刚才这道题有何不同?经思考后学生C回答,一是前一道题已知循环次数,而这道题循环次数未知. 如何设计算法程序?学生D举手回答他设计的程序2:

程序2大多数同学同意这个程序设计,这个程序究竟是否正确?我们将此程序输入计算机执行后得i的值是17,若交换s=s*i,i=i+2的先后顺序,再将程序输入计算机执行后得i的值为15. 显然由前一题1×3×5×7×…×13=135135可知,15是使1×3×5×7×…>135135成立的最小整数. 这道题由于数字较大不易手工检验,所以如果没有计算机即时执行程序检验较难发现错误. 通过这两道题的练习,引导学生总结出用循环语句编写程序时,循环体内的最后一条语句一般应是改变循环变量的值.

2“整合”能有效促进学生数学机械化思想的养成

现代数学机械化思想的核心就是算法,即把现实问题数学化,数学问题代数化,然后构造算法,通过计算机来试探、尝试和证明,从而发现、证明规律. 在算法初步的教学中,我们应通过案例教学法初步让学生学会用计算机解决问题的基本思想,即首先找到解决问题的算法(可用计算机实现),然后通过编写程序借助计算机的高速运算使问题快速获解. 如设计一个程序,实现:从键盘上输入一个不小于2的正整数n,判断n是否为质数,并在屏幕上显示“是质数”或“不是质数”.根据质数的定义“除了n=input(“请输入不小于2的正整数n的值:”);

程序3能被1和它本身整除之外不能再被其它整数整除的数叫质数”,故这个问题的算法思想是:由键盘任意输入一个不小于2的正整数n,设置循环变量i的初值为2,循环条件为n是否不能被i整除,若是循环变量增加1,继续检验,直到n能被i整除为止,结束循环. 然后判断n与i是否相等,若相等说明n只能被1和它本身整除是质数,若不等则说明n不是质数. 程序如程序3:(用Scilab-533语言编写)

然后上机执行程序,检验所编程序是否正确. 只有让学生经历设计算法编写程序上机调试这样的实际体验,才能逐步建立起用算法语句编程解决实际问题的思维方法和数学机械化思想的养成.

3“整合”能有效提高学生学习算法的积极性

在算法初步的教学过程中,应注重将算法融入到高中数学课程的相关内容中,让学生体验用算法在解决数学实际问题中的作用和信息技术与算法整合的优越性,提高他们学习算法的兴趣和积极性. 例如学生在高中一年级时学过用二分法求方程的近似解,当初利用笔算或计算器计算做这类题都比较繁琐,现在利用算法语句编成程序在计算机上执行,则方便快捷. 也可选取一些用常规方法解决比较困难的数学问题,通过编程后在计算机上运行直接得到结果,学生有了在计算机实现算法的体验,会增强对算法的感性认识,也会增强对算法的兴趣,真正理解算法的实际应用. 例如我在算法案例教学中,曾给学生这样一个数学问题:“一个人欲登上第10级楼梯,如果规定每步只能跨上一级或两级,则不同的走法共有多少种?”这个问题的一种解法是用分类计数原理,第一类:没有一步两级的,则只有一种走法;第二类:恰有一步是走两级的,则走完10级要走9步,9步中选一步是走两级的,有C19=9种可能走法;第三类:恰有两步是一步走两级的,则走完10级要走8步,8步中选两步是一步走两级的,有C28=28种可能走法;依次类推,共有1+C19+C28+C37+C46+C55=89种走法. 但这种解法不能算是一个好的算法,因为这种算法不便于编程在计算机上运行. 要使这个问题能够通过编写程序让计算机运行解决,前提必须要寻找到一个好的算法. 用计算机解决问题的核心思想是通过循环语句让计算机反复运行,借助计算机的高速运算,达到快速解决问题的目的. 为了要使用循环语句,通常利用递推思想建立起一个递推关系式. 本题的具体算法思想如下:假设走完这10级楼梯有an种走法,这些走法可按第一步来分类,第一类:第一步是一步一级,则余下的n-1级有an-1种走法;第二类:第一步是一步两级,则余下的n-2级有an-2种走法,所以an=an-1+an-2,又易得a1=1,a2=2. 据此递推公式和初始值可编写程序4.a=1;

程序4此程序输入计算机运行后得c=89. 将此程序稍作修改,第一行添加语句“n=input(“请输入登上楼梯的级数n=”);”循环条件改为i

算法初步范文第3篇

一、程序框图的完善

例1 如右图给出的是计算12+14+16+…+1100的值的一个程序框图,其中判断框内应填入的条件是_____________.

解析:判断框中填的是条件语句.因为最后加的一项为1100,不满足条件时跳出循环,故循环终止条件为i≤100.

答案:i≤100.

评注:识别框图的结构和实际意义,是填写缺损条件的关键.

例2 如图(1)是某县参加2010年高考的学生身高条形统计图,从左到右的各条形表示的学生人数依次记为A1、A2、…、A10[如A1表示身高(单位:cm)在[150,155]内的学生人数].图(2)是统计图(1)中身高在一定范围内学生人数的一个算法流程图.现要统计身高在170~190cm(含170cm,不含190cm)的学生人数,那么在流程图中的判断框内应填写的条件是

解析:由题意知在170~190cm段的学生人数为A6+A7+A8+A9,故i取值6,7,8,9,故填i≤9.

答案:i≤9.

评注:将算法初步与统计概率结合在一起命题,是一种新的命题趋势,值得注意.

例3 已知函数f(x)=ax3+12x2在x=-1处取得极大值,h(x)=f′(x),如图所示的程序框图运行后,输出结果S>20092010,那么判断

框中可以填入的关于k的判断条件是_____________

解析:由条件知f′(1)=(3ax2+x)|x=-1=3a-1=0,a=13,h(x)=x2+x,程序框图表示的算法是计算S=11×2+12×3+…+1k(k+1)=kk+1,

由于输出结果S>20092010,k=2010,故条件为k

答案:k

评注:本例把对函数与数列有关知识的考查放在算法程序框图中,体现了算法命题的综合性.

二、基本算法的执行

例4 阅读右边的程序框图,运行相应的程序,则输出s的值为_____________

解析:第一次运行程序时,i=1,s=3;第二次运行程序时,i=2,s=4;第三次运行程序时,i=3,s=1;第四次运行程序时,i=4,s=0,此时执行i=i+1后i=5,推出循环输出s=0.

答案:0.

评注:涉及循环语句的问题通常可以采用一次执行循环体的方式解决.本题主要考查条件语句与循环语句的基本应用,属于容易题.

例5 已知右图是表示实现某个功能算法的伪代码,若执行该伪代码输出的结果是-1,则输入的值x=_____________.(填上所有可能的值)

解析:本题算法实现的功能是计算分段函数f(x)=log2x(x>0)x-1(x≤0)的函数值,需要输出函数值为-1,则f(x)=-1,可求得x=0或x=12

答案:0,12.

评注:要求输入的初始值,一般可依据算法的功能和输出结果,建立方程来求.

例6 某程序框图如右图所示,该程序运行后输出的S为_____________

解析:程序运行过程为:S=2,i=1,i≤2010满足S=1+21-2=-3,i=1+1=2,再判断i≤2010满足S=1+-31--3=-12,i=2+1=3,再判断i≤2010仍满足,S=1+(-12)1-(-12)=13,i=3+1=4,依次进行下去,S=2,i=5;S=-3,i=6,…,可见S的值以4为周期重复出现,i=2008判断后,得S=2,i=2009,继续运行得S=-3,i=2010,得S=-12,i=2011,此时不满足i≤2010,输出S=-12后结束.

答案:-12

评注:这类问题,通常由开始一步一步运行,根据判断条件,要么几步后就会输出结果,要么就会出现规律,如周期性.

算法初步范文第4篇

【关键词】算法概念;算法思想;算法教学;难点;策略和途径

算法,一个既陌生又熟悉的名词。说陌生,因为算法概念从未进入我国中学数学教学大纲。新的高中数学课程标准破天荒地把算法作为重要内容列入必修课,自然出乎人们的意料。说到熟悉,那是因为从小学就开始接触算法。例如做四则运算要先乘除后加减,从里往外脱括弧,竖式笔算等等都是算法,只要按照一定的程序一步一步做,一定不会错。至于乘法口诀、珠算口诀更是算法的具体体现。因此,算法其实是耳熟能详的数学对象。一般地,算法是指在解决问题时按照某种机械程序步骤一定可以得到结果的处理过程。这种程序必须是确定的、有效的、有限的。

为解决一个问题而采取的方法和步骤,称为算法。算法是数学的重要组成部分,是计算机理论和技术的基础。随着现代信息技术的飞速发展,算法思想已经成为现代人应具备的一种数学素养。新课标中将算法列为必修内容,正是为了使学生形成符合时代要求的新的“数学基础”。

算法思想是贯穿高中课程的一条主线。算法思想就是指按照一定的步骤,一步一步去解决某个问题的程序化思想。在数学中,完成每一件工作,例如,计算一个函数值,求解一个方程,证明一个结果,等等,我们都需要有一个清晰的思路,一步一步地去完成,这就是算法的思想,程序化的思想。以前,我们没有给出算法这个名词,但是,我们一直在利用算法的思想。尤其在计算机普及的时代,程序化越来越为人们普遍接受,提高设计“算法的能力”变得很必要了。

算法思想可以很好的培养学生的逻辑推理能力。给出一个算法,实际上是给出了一种实现的方法,就是一种构造型的证明或论证。在实验的过程中,算法课程学生是欢迎的,提高了学生的逻辑思维能力。并且,很容易把这样的思维习惯迁移到日常生活中,这正是数学教育所期待的。

在高中数学课程中,算法分为两部分:一部分是介绍算法的基本思想和基本知识;另一部分是把算法思想渗透到高中课程的其他内容中。

我们通过以下几个步骤,介绍算法的基本思想和基本知识。

用自然语言描述算法;

用框图语言描述算法;

用基本语句(伪代码)描述算法。

有条件的地方可以使用程序语言描述算法,并上机操作。

对于算法的教学,应注意以下几点:

(1) 突出算法思想,强调解决问题的通性通法,而不去关注问题的特殊技巧。

(2)通过学生熟悉的实例和数学中的实例进行教学,即案例教学;引导学生动手实践,在实践中学习、体会、理解算法的基本思想。

新课标要求学生会识别程序框图,能认识基本算法语句,会编写程序框图。但是高考时一般不会让学生编写框图(因框图编写形式多样,会增加改卷负担,所以命题人一般会给出程序框图让学生去读图做题),高考命题以选择题为主,难度相对较低。

根据新课标中算法的内容和要求,结合学生已有的认知结构和学习能力,算法教学必须把握重点,区分算法教学和程序语言教学,分散难点,逐层深入。我认为这部分内容的难点可能主要体现在这样几个方面:

(1)算法设计。算法与平时解题的区别,在于平时解题不一定有严格的程序,而要让计算机执行,必须严格按步骤进行。因此在算法设计中,应将平时解题中没有想清楚的每一步都想清楚,这对学生的逻辑思维能力是极大的考验。另外,算法的多样性和方法的优化也会使学生很不适应。

(2)逻辑结构理解。对于某个具体的数学问题,理解设计程序框图时逻辑结构的选择和应用是难点,因为综合运用知识解决具体问题的能力是学生的薄弱环节,就好比认识字不一定能写出好的文章一样。

(3)算法表示的转化。课标要求通过模仿、操作、探索,经历设计程序框图、并将程序框图转化成程序语句的过程。这里面要经历两个转化,一是将自然语言转化为程序框图,二是将程序框图转化为程序语句。尽管课标中好象只要求“模仿”、“理解”,但模仿不等于重复,不会简单的应用绝不可能是真正意义上的理解,因此要求学生对算法表示进行 准确地转化也是教学中的难点。

从新课标制定的目标和要求看,算法内容属于“程序性知识”或叫“默会知识”。这类知识是从活动过程和活动方式中表现出来的,主要通过在实践中通过观察、模仿、和自主活动而获得。因此只有在目标定位、教案设计、教学方式等方面均能对知识特点和学生的学习特点充分考虑,才能真正使课程的设置意图得到体现,难点得到突破。

针对上面对算法内容的难点分析,我认为突破难点的策略和途径主要有:

(1)目标和要求适当。张奠宙先生指出:“算法应该从小学开始教”,“算法贯穿整个中学数学”。的确,算法的思想和知识、技能,是学生的终身发展所必需的。但是要求学生通过12课时就能一步到位,系统地掌握程序的设计和编写,显然是不现实的。

算法内容重要的是让学生体会算法的思想,理解算法的重要性与有效性,加强逻辑思维,在经历过程中理解逻辑结构和语句。可以要求学生在观察、模仿的基础上,在老师的指导下尝试解决一些简单的问题,不应过分注重技术操作,将算法内容单纯地变成程序语言的学习和程序设计。

(2)教案备课要贴近学生实际。在教案备课中内容的呈现与设计,素材的选取都应贴近学生的实际,有助于激发学习兴趣,让学生乐于、易于接受,能较好地促进学生的自主探索。其中实例的开发尤为重要。另外平时的教学中要把算法思想渗透到其他数学内容中去,以及与高中信息技术教材相呼应。

(3)教学中学生自主探究,教师适度帮助。由于算法内容属于“默会知识”,学之道在于“悟”。教学中应当充分重视学生亲身感受、实践操作、合作交流,给学生提供探索与交流的空间,使数学学习过程真正成为学生在已有经验基础上的主动建构过程,在知识的形成与应用过程中认识和掌握双基,在经历过程中感悟算法的思想和方法。在强调学生自主探究的同时,老师也应适度地给予引导、帮助,如教学情境的设计、适时的点拨、情感激励等。

对于算法,对于新课标,笔者对他的认识才刚起步,有待于今后边实践、边反思、边总结,更好地为教育、教学服务。

参考文献

[1] 曹才翰.中学数学教学概论. 北京:北京师范大学出版社,1990

[2] 曹才翰,章建跃. 数学教育心理学.北京:北京师范大学出版 社,1999

算法初步范文第5篇

主题阐释

算法是普通高中信息技术内容体系中重要的大概念,它是一个有穷规则的集合,其中之规则规定了解决某一特定类型问题的一个运算系列;而计算是指数据在运算符的操作下,按规则进行的数据变换。这里无论是算法还是计算都提到了“规则”,可以理解为算法规定了任务执行或问题求解的一系列步骤,而计算是这些任务执行或问题求解的具体实现。

在教学中我们不必为算法、计算的概念去绕口地解释,而应当领会其实质,利用计算机的优势特点去设计解决问题的规则和实现的方法。例如,累加器S=S+X,就利用了变量赋值的特点实现了迭代的方法;斐波那契数列问题,使用了递归的思路;等等。这些都需要教师在教学中引导学生思考:如何建立模型,实现有效的自动计算?如何方便、高效地实现自动计算?编程是解决具体问题的途径之一。

本期提供的三个案例,分别用不同的应用实例,让学生体验编程计算,初步了解算法。

教W案例

案例1:用“割圆术”计算圆周率

学业要求:能提取割圆术问题的基本特征,进行抽象处理,并用形式化的方法表述问题,运用算法设计解决问题的方案,能使用编程语言实现这一方案,把利用信息技术解决问题的过程迁移到其他相关问题中,并能采用恰当的方法优化解决方案。

知识要点:割圆术,迭代算法,近似值,精度。

教学方法:通过自主学习、推导分析、归纳总结,了解用“割圆术”计算圆周率的思想与方法;并通过运行观察程序,感知计算机近似运算的高效。

活动步骤:

①教师展示从古至今,不同的人对π的推导和计算到的数字。②给学生阅读材料,自主学习“割圆术”的思想方法。③请学生计算半径为1的圆的内接三角形的面积。④请学生计算半径为1的圆的内接六边形的面积。 ⑤请学生继续尝试计算半径为1的圆的内接十二边形的面积,并归纳计算规律。⑥教师引导学生推导计算半径为1的圆的内接二十四边形的面积,并总结计算规律,用自然语言描述此算法。⑦将“割圆术”程序的可执行文件发给学生,学生运行程序,观察结果,感知计算机近似运算。⑧请学生利用“割圆术”,通过分析初始状态为正方形的正多边形尝试近似计算圆周率,并编写程序。⑨学生程序展示,相互评价讨论,提出优化或改进意见。

教学思路:

(1)按照新课程标准的要求,本课的学习目标是:针对给定的问题进行分析,明确割圆术的思想方法;能提取割圆术问题的基本特征,进行抽象处理,并用形式化的方法表述问题;运用算法设计解决问题的方案,能使用编程语言实现这一方案;把利用信息技术解决问题的过程迁移到其他相关问题中,并能采用恰当的方法优化解决方案。具体的知识要点包括割圆术、迭代算法,近似值及精度。在教学中应当把“能提取割圆术问题的基本特征,进行抽象处理,并用形式化的方法表述问题;运用算法设计解决问题的方案,能使用编程语言实现这一方案”作为教学重点,而“把利用信息技术解决问题的过程迁移到其他相关问题中,并能采用恰当的方法优化解决方案”是教学的难点。

(2)古今中外,许多人致力于圆周率的研究与计算。为了计算出圆周率的越来越好的近似值,一代代的数学家为这个神秘的数贡献了无数的时间与心血。古人计算圆周率,一般是用割圆术。

(3)所谓“割圆术”,就是用单位半径圆内接正多边形的面积去无限逼近圆面积并以此求取圆周率的方法。学生通过自主学习这一思想方法,尝试手工计算单位半径圆内接三角形、六边形、十二边形的面积,在其中体会这种基于几何的算法计算量大,速度慢。在计算机程序中,成倍地增加正多边形的边数n,让所求得的π逐渐接近真实的π值,让学生感受计算机在近似计算中的高效。

(4)在此基础上,两人一组,利用“割圆术”,通过分析初始状态为正方形的正多边形尝试近似计算圆周率,并编写程序。学生程序展示,相互评价讨论,提出优化或改进意见。

(5)本活动设计课时为1课时。

案例2:递归算法的教学

学业要求:掌握递归算法的基本特征,能够用递归算法解决相关问题,了解递归算法的执行过程。

知识要点:递推算法,递归算法,递归的结束条件、条件语句、循环语句。

教学方法:讲授法,任务驱动法,小组活动法。

活动步骤:

①教师通过讲授法,复习前面的知识――递推算法的编程思路,引出本课实例――斐波那契数列问题。②请学生分组讨论斐波那契数列问题的编程解题思路,总结出解决这一问题的关键条件,得出递推关系式:F[1]=1,F[2]=1,F[N]=F[N-1]+F[N-2](N>=3),并独立编制出递推算法的相关程序。③教师展示学生的编程结果,让大家总结、提炼出递推的条件及循环语句的组成,分析递推程序的执行过程:从小到大,直到目标实现。④教师总结另一种编写程序的方法:从大到小,引出递归算法。⑤请学生自学教材内容,分组讨论、总结出递归算法的定义、思路以及使用递归算法的注意事项,并独立编制出递归算法的相关程序。⑥教师展示递归程序执行过程,归纳总结出编写递归程序的一般思路:用过程或函数方式实现递归程序;从底到顶分析,从顶到底求解;先判断递归条件再递归,否则容易出现死循环。⑦请学生分组或独立完成以下程序(任选一题完成):分解质因数(任给一正整数,将其分解成质因数并输出);上楼梯问题(有一十级的楼梯,上楼时可以一步一级,也可以一步两级,求出共有多少种上楼梯的方法);汉诺塔问题。⑧同学间成果展示,相互评价,讨论,提出改进方案。

教学思路:

(1)按照新课程标准的要求,本单元的学习目标是:熟练掌握递推算法的应用,掌握递归算法的特点,能利用递归算法编制程序解决常见问题,树立递推、递归算法解决问题的基本计算思维。本课时的重点内容是递归算法。具体知识点是:递推算法、递归算法、递归算法的特点,递推、递归算法的结束条件,用递归算法编制程序解决相关问题。本课时的教学难点是:递归算法的执行过程和递归的结束条件。

(2)递推算法是按照从小到大的思维方式依次求出各级问题,思维较清楚,程序执行过程符合人的求解过程,比较好理解,但在有些较大问题上,程序的编制过程比较难。而递归算法是在递推算法的基础上,采用从小到大的分析方式。从大到小的求解过程,编制程序比较容易,但程序的执行过程比较难理解,因为要用到堆栈的理解方式,堆栈的概念在以后的学习过程中会详细介绍,这里只是打下伏笔。

(3)递推、递归两者的共同点是:一要找到递推的关系式;二要找到结束条件(初始化条件)。不同点是:求解过程的顺序不同,递推在编制程序时采用的是从小依次向大逐步求解的方式,而递归在编制程序时采用的是降低问题规模的思维方式。

(4)基于上述认识,这一节课中设计了两个活动。

这两个活动,重点是要让学生理解两个程序的执行过程(求解过程),理解递推、递归算法各自的特点,培养学生的递推、递归算法思想,并能根据问题的实际情况,选择用不同的算法编程实现。

(5)在上述这两个活动的基础上,让学生有选择地完成相关问题,既能达到分层教学的目的,又能加深学生对本节课内容的理解。

(6)本活动可用两2节课完成。

案例3:计算朋友圈人数

学业要求:能够针对限定l件的实际问题进行数据抽象,运用数据结构合理组织、存储数据,选择合适的算法(排序、查找、迭代、递归)编程实现、解决问题。

情境设置:小明所在学校有N个学生,形成M个俱乐部。每个俱乐部的学生都有着相似的爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友,且B和C是朋友,则A和C也是朋友。小明想知道,在这些朋友圈中最大的有多少人。

研究题目:根据情境分析题意,确定数据结构,建立数学模型,探索解题思路,编程为小明同学找到答案。

项目活动:

①(或选修课)的情况,假设一个组(或一门课)为一个朋友圈,试试能否找出最大朋友圈;记下寻找过程数据,分析结构,探索计算模型、方法。②设N=7,M=4。且第一俱乐部有3人,学号为1、2、3;第二俱乐部有2人,学号为1、4;第三俱乐部有3人,学号为5、6、7;第四俱乐部有1人,学号为6。模拟计算机解决此问题。③根据前述思路,编程计算最大的朋友圈中有多少人。

教学说明:

①确定总的学生学号Total,即Total=[1、2、3、4、5、6、7]。②将4个俱乐部分为4个数组:N1=1、2、3,N2=1、4,N3=5、6、7,N4=6。③以学号1为例,寻找能与学号1成朋友关系的学号,将含有学号1的俱乐部合并在一起,即M1=N1 U N2=1、2、3、4。学号2、3、4现在都是学号1的朋友,根据朋友的朋友也是我的朋友,因此学号2、3、4的朋友也是学号1的朋友,因此学号1的朋友圈M1还有可能扩大,依次查询包含学号2、3、4的俱乐部并与原本M1朋友圈进行合并,即M2=M1 U N1 U N2=1、2、3、4。据此,得出第一个朋友圈为1、2、3、4。④同理,现在只剩下学号5、6、7没有划分朋友圈,以学号5为例,按照上述步骤依次查询得出M3朋友圈5、6、7。⑤所有学号分圈完毕,得出两个朋友圈:M2=1、2、3、4,M3=5、6、7。⑥比较两个朋友圈数量大小,最大的即为最大朋友圈,数组长度即为最大朋友圈中人的个数,数组内容即为朋友圈的具体人员。⑦如果学生人数和俱乐部的组成发生变化,只需要相应的在矩形数组里修改对应参数。

运行结果如下图所示。

专家点评

案例1

我国魏晋时期数学家刘徽发明的割圆术,是以“圆内接正多边形的面积”来无限逼近“圆面积”,即割之弥细,所失弥少,割之又割,以至于不可割,则与圆合体,而无所失矣。这里应用近似计算的方法,充分体现了我国古代数学家的智慧。该案例正是让学生从计算半径为1的圆的内接三角形的面积出发,逐渐增加边数,寻找其规律;同时,将“割圆术”程序的可执行文件发给学生,学生运行程序,观察结果,感知计算机近似运算;在此基础上,再让学生利用“割圆术”,通过分析初始状态为正方形的正多边形尝试近似计算圆周率,并用计算机编程计算。这一思路既体现了数学中的极限思想,又符合计算机解决问题所使用的近似方法,思路正确,方法得当,值得肯定。

但从案例本身来看,对计算机解决问题使用的近似计算方法中的近似值及精度的要求体现不够充分,学生探究的目的不太明确。新课标要求学生依据解决问题的需要,设计和表示简单算法。在本案例中,算法如何体现是引导学生解决问题的关键:需不需要使用通项式,什么地方使用迭代算法,怎么实现预定的精度等思想和方法,在案例中体现得不够充分,不利于学生计算思维的形成,应当改进。

(案例1提供:成都石室中学 唐佩、杜妮香、曾贵胜;点评人:四川省教育科学研究所 李维明)

案例2

新课标要求学生能够针对限定条件的实际问题进行数据抽象,运用数据结构合理组织、存储数据,选择合适的算法(排序、查找、迭代、递归)编程实现、解决问题。而该案例正是从讨论斐波那契数列问题的编程解题思路出发,让学生总结出解决这一问题的关键条件,得出递推关系式并引出递推算法,并在此基础上,采用从小到大的分析方式、从大到小的求解过程,引出实现递归的算法,教学思路清晰。在具体活动中让学生解决诸如分解质因数、上楼梯问题、汉诺塔问题等实例问题,由简至繁,体验递归思想,感受计算乐趣,处理得当。如果在案例整体设计上,能以具体的实际问题解决的例子为项目活动的内容,引导学生逐步分析,理解迭代、递归的含义,进而形成解决此类问题的思路,找到解决此类问题的方法,达到发展计算思维的目的,项目活动的效果就更好了。

(案例2提供:四川省教育厅教育物资装备中心 李大国;点评人:四川省教育科学研究所 李维明)

案例3

新课标要求学生能够在掌握常用数据结构的概念、特点、操作、编程实现方法等内容的基础上,对简单的数据问题进行分析,选择恰当的数据结构,用一种程序设计语言编程实现,在问题解决过程中对数据抽象、数据结构的思想与方法有初步的认识。该案例在解决问题时,首先将4个俱乐部设为4个数组,然后查找数组中的等价元素,并将各数组等价集合并,通过比较等价集的规模,找出最大朋友圈,这一方法,正是课标要求的具体呈现。

相关期刊更多

计算机技术与发展

统计源期刊 审核时间1个月内

陕西省工业和信息化厅

计算机研究与发展

北大期刊 审核时间1-3个月

中科院出版委员会

模式识别与人工智能

北大期刊 审核时间1-3个月

中国科学技术协会;中国自动化学会