《递归算法的实现》教学设计

时间:2023-09-25 07:26:57 更多教学设计 收藏本文 下载本文

《递归算法的实现》教学设计(精选18篇)由网友“木法雨”投稿提供,以下是小编整理过的《递归算法的实现》教学设计,仅供参考,希望能够帮助到大家。

《递归算法的实现》教学设计

篇1:《递归算法的实现》教学设计

《递归算法的实现》教学设计

一、教材分析

“算法的程序实现”是高中信息技术教育科学出版社《算法与程序设计》选修模块第三单元 的内容,本节课是“递归算法的程序实现”,前面学习了用解析法解决问题、穷举法解决问题、在数组中查找数据、对数进行排序以及本节的前一小节知识点“什么是自定义函数”的学习,在学习自定义函数的基础上,学习递归算法的程序实现是自定义函数的具体应用,培养学生“自顶向下”、“逐步求精”的意识起着重要的作用。

二、学情分析

教学对象是高中二年级学生,前面学习了程序设计的各种结构,在学习程序设计各种结构的应用过程中,培养了用计算机编程解决现实中的问题,特别的学习循环语句的过程中,应用了大量的循环结构进行“递推”算法。前一节课学习了如何自定义函数,在此基础上学习深入学习和体会自定义函数的应用。以递推算法的逆向思维进行求解问题,在学习过程中体会递归算法的思想过程。多维度的思考问题和解决问题是提高学生的学习兴趣关键。

三、教学三维目标

知识与技能:

1、理解什么是递归算法,学生用递归算法的思想分析问题

2、能够应用自定义函数方法实现递归算法的编程

过程与方法:

学生参与讨论,通过思考、动手操作,体验递归算法的方法

情感态度与价值:

结合数学中的实例,激发学生的数学建模的意识,培养学生多维度的思考问题和解决问题。

四、教学重点与难点

重点:

理解什么是递归算法,学生用递归算法的思想分析问题

应用自定义函数方法实现递归算法的编程

难点:

应用自定义函数方法实现递归算法的编程

五、教学策略教

递归算法的实现思想是比较抽象,比较理论化的教学内容。本着培养学生的发现问题、分析问题、解决问题的意识与能力入手。知识主要是靠学生学会的,学习就是发生在学生头脑的建构。因此,教师必须明确学生是学习的主体,研究学生学习的真实心理活动,分析其认识过程、机制及心智变化。确定教学方法。

六、教学环境

网络教室,教学软件VB,大屏幕投影,音响播放视频

七、教学资源准备

从本学科的特点(学生可能不会花太多的时间进行知识的记忆和拓展学习)、学生的认知水平及学习心理特征(做自己可能做到的事,如果感觉到繁杂自己很难实现可能会放弃),为更好的激发学生的学习动机与信心,为保持学生的学习激情,不可能每位同学都喜欢程序设计,可能因素比较多,特此在教学过程中我设计了学生学习支持材料(智能化半成品加工程序),目的是为了学生在有限的课堂中能清楚的了解算法与程序设计思想和方法。

八、教学过程

(一)创设情境,提出课题

师:上课之前我问同学们一个问题,平时你们上体育课是怎么报数的? 生:1、2、3、4、5、……

师:除了队列中第一位同学报1以外,每一位同学报出的数字是怎么得出来的?(推算!)(请看视频!问你们报数是不是这样?)

师:黑板板书“推算———>(最后一位同学所报的数是前面同学一步步推出的结果)一步步的推出结果”这就是我们常用的递推算法。

师:今天我给同学们介绍一种你们没见过的报数方式(请看视频)

师:引导学生观察并讨论视频(这个报数方式,被问的同学将问题推下去——>一步步的推——>底端——>答案一步步的返回一直到结束)这就是本节课我们学习的递归算法思想。

设计意图:激发学生学习求知欲,并初步奠定“递归算法”思考分析问题的方法。

(二)启发主体,导出递归算法程序设计思想

(1)展示题:

小猴吃桃:

有一天小猴子摘若干个桃子,当即吃了一半还觉得不过瘾,又多吃了一个。第二天接着吃剩下桃子中的.一个,仍觉得不过瘾又多吃了一个,以后小猴子都是吃尚存桃子一半多一个。

问题一:到第3天早上小猴子再去吃桃子的时候,看到只剩下一个桃子。问小猴子第一天共摘下了多少个桃子?

设计意图:鼓励学生进行推算,这里只设3天目的是简化题的难度,让学生有信心深入本思考,初步培养推算的思想。(根据学生思维特点,这一阶段思维主要在于习惯性的数学推算环节)

问题二:到第10天早上小猴子再去吃桃子的时候,看到只剩下一个桃子。问小猴子第一天共摘下了多少个桃子? (学生思考,培养学生从数学思维走入程序设计推算的思维)。

(2)大屏幕展示递推算法的推算动画演示过程

(3)根据推算10天吃桃动画演示过程得出的数据和本题大意

(3)根据推算10天吃桃动画演示过程得出的数据和本题大意引导学生讨论并建立数学模型:

假设第days ,days<=10天的桃子数为tao(days)那么

tao=10 days=1

tao(days)=(tao(days+1)+1)*2 n<10

(4)(提示学生回忆今天老师介绍的报数方式)通过数学模型来看这个问题?引导学生换个思路来思考这道题的问题求解,第10天的桃子数为1个,求第一天的桃子数?

设计意图:培养学生分析问题、解决问题能力,煅练学生“数学建模”,让学生通过实践和思考找出本题的关键。并引出递归算法的解题思想。

(三)深入学习递归算法的实现

(1)展示递归算法的动画演算过程,分析演算过程。通过演算过程,引导学生总结出,递归算法的两个必备条件:

1、递归分为递推与回归两个过程

2、递归必需要有结束条件

3、递归算法的实现方式:递归算法是数值层层调用实现的,函数先由上向下调用,当达到最底层后,再将数值层层向上返回。(在函数层层调用的过程中,参数的改变)

(2)通过上面的分析,大至的递归算法实现思想我们了解了,那么要思考在编程过程中如何解决两个问题?

1、怎么将问题推下去?

2、怎么将结果回归?

设计意图:在学生初步认识递归算法的演算过程及特点以后,提出递归算法程序设计实现的关键问题,层层深入的循导学生思考问题,培养学生分析和发现问题的能力。

(3)展示递归算法自定义函数框架,并分析。

设计意图:为下面进行操作练习奠定思维框架。

(四)学生操作

学生基本了解递归思路和递归实现的程序设计框架后开展操作练习,教师巡回指导!

(五)总结提高

总结操学生操作,介绍递归算法自定义函数的常用框架!

设计意图:为下面学生自主练习奠定思维框架。

(六)回顾视频1和视频2比较提高,

引导学生能过视频分析,讨论出“两个视频报数同学的动作的不同”1、视频1的同学在没有得到答案的时候就头部转向所问的同学等待,2、视频1和视频2的共同点是“完成报任务”的时候头部都向前看!)

总结出:递归算法使得计算机资源耗费大,所以效率比较底(常驻内存的数据比较多)。

设计意图:通过视频模拟算法的操作过程,让学生能够会意递归算法在计算机内部操作的内含。培养学生发散思维,理论也是来源于生活,在学习理论中学会生活,在生活中学会思考。

(七)教材使用

1、分析这个数例:1、1、2、3、5、8、13、……求数例中第十二个数的值是?

2、引导学生分析并建立数学模型:

3、此题是我们教材P68的例题“免子繁殖问题”,由于教材分析很详细所以我想本题留给同学们课后思考,并研究递归算法实现程序与非递归算法实现程序。下节课上机调试!

设计意图:分析问题并建立数学模型,冲破学生学习的心理障碍,提高学生使用教材信心,并给学生提供可参考的学习资源和个性发展的空间。

(八)课堂练习

设计意图:巩固课堂学习内容

(九)课堂小结

设计意图:引导学生回顾并明确本节课的学习目标

(十)下课前提出问题

递归算法使得计算机资源耗费比较大,所以效率比较低(常驻内存的数据比较多)递推算法也能实现,为什么还要使用递归算法呢?下节课探讨(汉诺塔问题求解)

设计意图:让学生带着问题回家,下节课又带着问题回到课堂,激发学生可持续学习的兴趣。

获奖情况:全国高中信息技术课展评一等奖作品。

篇2:递归实现回文判断

递归实现回文判断

如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序

int find(char *str, int n) {

if(n<=1) return 1;

else if(str[0]==str[n-1]) return find(str+1, n-2);

else return 0;

}

int main(int argc, char* argv[]) {

char *str = “abcdedcba”;

printf(“%s: %s\n”, str, find(str, strlen(str)) ? “Yes” : “No”);

}

篇3:后序遍历非递归算法

#define maxsize 100

typedef enum{L,R} tagtype;

typedef struct

{

Bitree ptr;

tagtype tag;

}stacknode;

typedef struct

{

stacknode Elem[maxsize];

int top;

}SqStack;

//后序遍历

void PostOrderUnrec(Bitree t)

{

SqStack s;

stacknode x;

StackInit(s);

p=t;

do

{

while (p!=null)       //遍历左子树

{

x.ptr = p;

x.tag = L;        //标记为左子树

push(s,x);

p=p->lchild;

}

while (!StackEmpty(s) &&s.Elem[s.top].tag==R)

{

x = pop(s);

p = x.ptr;

visite(p->data);   //tag为R,表示右子树访问完毕,故访问根结点

}

if (!StackEmpty(s))

{

s.Elem[s.top].tag =R;    //遍历右子树

p=s.Elem[s.top].ptr->rchild;

}

}while (!StackEmpty(s));

}//PostOrderUnrec

篇4:算法教学设计

【教材分析】

本节教材的地位、作用等分析。

本节教材位于高中信息技术必修模块第三章中:“算法及其实现”部分内容,本节课的学习目的是使学生体验算法思想,了解算法和程序设计在解决问题过程中的地位和作用;体验信息技术中算法的魅力,为学生选修算法模块奠定基础。

【学情分析】

算法是我们信息技术基础模块的最难的一块内容,课时又少,只有两课时,如果初中信息技术正常开展,那么这个内容也容易开展。

【教学目标】

1、知识与技能

理解算法的含义,体会算法在程序设计中的地位; 培养用计算机编程解决现实问题的能力。

2、过程与方法

能通过观察吸尘器的工作来分析其算法,培养学生用程序设计的思想来思考产品。

3、情感态度与价值观

引导学生了解程序设计的更多知识,体验信息技术的强大魅力; 激发学生对计算机编程解决现实问题的学习欲望,提高学习兴趣。

渗透人文教育,懂得感恩。

【重点难点】

教学重点:算法的特征;算法的表示

教学难点:对算法的理解,

流程图

【设计思想】

新课标强调要“培养解决问题的能力,倡导运用信息技术进行创新实践”,以前教学中我一直从面到点,先讲算法的定义和特点,再举例,效果不是很好,学生印象不深,往往到学期结束的时候,对算法印象全无。

因此,这次在设计本节内容的时候,在选择实例的时候,我从两点考虑:一是生活化,选择的例子尽可能贴近生活,既要达到吸引学生的目的,又能体现技术的真实内涵;二是通过把抽象的问题分析成为具体步骤或方法,从而形成算法,让学生理解计算机解决问题的基本过程。

我在选择实例的时候,尽量让这个例子能贯穿整堂课,把一个问题分析透,印象会深刻。

【教学流程】

导入

师:喜欢干家务吗?

生:不喜欢

师:可是有一个人就是无怨无悔的做着家务

生:谁?

师:“马大嫂”,你们认识“马大嫂”吗?每个家庭都有。

生:领悟

师: “马大嫂”在我们同学们的年纪时,也是不喜欢干家务的,是什么让他们无怨无悔的干着家务?作为他们的孩子,我们有没有想过替他们分担一点?或者当我们长到“马大嫂”

的年龄,我们能不能让家庭生活轻松一些?

生:讨论

师:家庭的智能化脚步离我们越来越近,我们的生活里随处可见,比如有定时功能的家电,洗衣机、洗碗机,今天我给大家推荐一款“买汰扫”的扫:智能吸尘器。

首先声明,我不是搞推销的,而是带领大家去设计生产产品的。今天我们一起来分析、设计一款智能吸尘器。

首先,我们分析一下原始的手工操作吸尘器的工作需要几步?

新课

生:三步,打开电源、开始工作、关闭电源

师:看来你们都是宋丹丹的徒弟,其实这也是我们用计算机解决实际问题的思维:先设计算法、再编制程序来实现算法。

师:什么是算法呢?算法是解决问题的方法和步骤,同学们用的是自然语言描述的算法,我是用流程图来描述算法。

算法描述的方法和步骤应该是有限的,有开必有关;有Begin必有End;

同学们是不是有被忽悠的感觉?有,就说明了我们的同学想的更远了,是啊,我这个算什么算法,跟本没解决什么

问题,对了,算法还有一个定义,解题方法的精确描述。

我这个算法的步骤有了,但不够精确描述,所以我们要自顶向下 ,逐步求精。

师:你们说哪个步骤需要细化?

生:第二步

师:那你们觉得吸尘器要体现智能,应该从哪些方面考虑?

生:讨论

归结你们的观点,主要有三个:设定清洁路线模块,躲避障碍物模块,自动充电程序 设定清洁路线模块

师:你们拖过地吗如果让你来拖地,你会选择怎样的路线既能减少重复路线,又能全部覆盖

好,我们模拟一下,(用flash 规定几个相同的区域,然后计时擦除)把橡皮擦当成我们的吸尘器,擦除前景颜色并计时,……通过大家的实践,我们可以看出几种方案比较科学,通过这个试验,我们知道解决问题的方法有很多,生活中也一样,关键是要选择合适的一种,达到既快又好、

这是我们在最优环境下的情况,没有考虑实际情况。 我们看看具体的设计

前面同学们提到躲避障碍物是设计的关键。 躲避障碍物模块

师:躲避障碍物模块是体现吸尘器智能的关键一点,我们先分析碰到墙壁怎么处理,只要碰到墙壁能处理,其他的是不是也是一个道理?

现在我请同学们描述一下碰到墙壁这个算法。

真了不起,你们用自然语言描述了这个算法,我习惯用流程图来描述。 请看我的算法

这个算法同样比较粗糙,我们一起把它修正一下,首先要确定哪些地方需要细化,对了,是怎样判断“有没有碰到墙壁?”,这是核心,你们认为怎样判断好?请大家在纸上设计设计

还有没有其它需要修正的?对了,怎样“转变方向”也要细化,你们认为怎样改变方向好?

就这个流程图本身,还有什么地方需要修正的吗Y和N线路里有相同的语句,我们可以把

它提出来,放在合并后的线路中、

好,我们把经过大家修改后的算法称为智能清扫模块

自动充电程序

我们还少了一个关键模块,地没扫完,电没了怎么办?

现在请同学们参考智能清扫模块的流程图,画一画碰到电不足了那一刻怎么处理的算法。

学生上台画流程图,根据学生的流程图修正,得到循环结构。

回顾小结

现在我们回顾一下我们设计智能吸尘器的过程:首先我们把复杂的问题简单化,设计了一个三步走的`算法,然后,选择了一个最优路线,再设计了一个具有智能的障碍物躲避

模块和自动充电模块,在第一个流程图里我们提出了算法要有开始和结束,即算法的有限性;最优路线里我们得出了最优算法;障碍物躲避模块我们提出了可行性和没有二义性。

针对以上算法,从开始到结束都离不开这三种情况,就像我们的生活,有可能一路直行、也有可能碰到分叉口、还有就是回到原路,还有没有其他的可能?这就如同我们的算法,所以这三种我们就称为基本结构,这些基本结构组合成大的程序。

拓展

有了算法,程序实现就容易了,经过我们一起设计的第一代机器人初具模型,请看我们的作品,再看看我写的代码,一些简单的语句你们也看得懂,比如我们的核心模块

我们用一节课的时间就已经设计出这样的产品,如果学了一本书,读了四年的大学,你们的产品不知要好到哪里,到时候别忘了给全班同学发一个哦。

课外作业

研究了智能吸尘器,你们有什么启发?那么我们就一起设计一下自己未来的家庭生活吧?

只有想不到的,没有做不到的。想法高于一切,这个想法就是我们今天讲的算法,它不单单存在于我们的计算机行业,生活中处处可见,希望大家做个有心人,好好设计自己未来的生活,设计不好,继续马大嫂的生活。

篇5:算法教学设计

教学目标:

1、经历自主解决问题、尝试进行有关分数乘法的简便算法的过程。

2、能解决有关分数乘法的简单问题,能运用运算定律进行分数简便算法。

3、感受运算定律应用的广泛性,能对简便算法的方法和结果的合理性作出有说服力的说明。

教学重点:

能观察题目的特点,灵活地选择合适的方法。

教学过程:

一、复习

1、提问:在加法计算中有哪两个运算定律?如何用字母表示?

在乘法计算中有哪些运算定律?如何用字母表示?

2、我们已经知道加法的交换律和结合律不仅适用于整数,小数,还可用于分数那么乘法计算中的.三个运算定律能否也适用于分数呢?

这就是我们这一课要学习的内容。

二、打字问题

1、让学生读题,了解题中的信息和问题,鼓励学生列出综合算式解答。

2、交流学生列出的算式和结果。

3、师生观察比较,使学生了解它们之间的联系(第一个算式应用乘法分配律就是第二个算式),从而得出:整数乘法的运算定律在分数中同样适用。

240×( 1/4+ 1/6) 2401/4×+240×1/6

= 240× 5/12 = 60 + 40

= 100(页) = 100(页)

三、简便算法

1、出示

7/8×4/15×5/7 ( 3/4+5/6 )×12

鼓励学生用简便算法计算。

2、交流学生计算的方法和结果,说说是怎样做的,依据是什么。

使学生了解分数连乘,写成分子连乘、分母连乘后,可以先进行约分。

试一试

让学生自主计算,交流时,说说运用了什么运算定律。

练一练

教学后记:

教学中我应坚持“以人为本”,学生为主体,结合新课改的新理念,充分利用知识间的内在联系,向学生提供充分从事数学活动,探究的机会,让学生在自主探索、合作交流中得到发展。所以由情境导入,引出整数乘法的运算定律,再由整数运算定律推广到小数乘法引入新授,然后小组合作,共同验证新课题。不足之处对学生的估计过高,所以使一些事先设计好的练习,没来得及做完。这也提醒我,备课,不仅要备教材,备教案,更重要的还是要备好学生,这是上好一堂课的关键。

篇6:算法教学设计

《算法与程序设计》是高中信息技术选修课程,但是《算法与程序设计》教学一直存在难教和难学的问题,因为程序设计本身抽象、枯燥,逻辑思维性强。对于一个初学者而言已经比较困难,而且要对所求解的问题进行算法分析;另外,传统教学方式不但不利于学生学习兴趣和思维能力的培养,反而会使学生程序设计思路狭窄,设计程序解决实际问题的能力与变通能力较弱。通过多年来的教学实践,笔者认为:注重学习兴趣培养,重视算法分析引导和自主探究是搞好算法和程序设计教学一种行之有效的方式

一、注意因材施教,发挥学生特长

学生是有差异的,教学中要根据学生的个别差异,做到有的放矢,充分调动学生的学习积极性,这一点在程序设计教学中尤为重要。教师一般都有这样的体会,一学程序设计,学生的两极分化就会特别严重。有些学生对程序设计特别感兴趣,喜欢编程,有时会编出让教师都惊讶的程序,而有些学生则不愿意学习,这就要在整体教学中注意兼顾个别学生。例如教材中的习题可以分为必做题和选做题,可以发挥优秀学生的内在潜力,同时也可以调动中等学生的学习积极性。另外对于程序设计初学者,编程入门初期,起点要低,可以从一个个简单实例出发,让学生从自身的实践中感受到这个的确很简单,从而迎合学生渴望成功的心理特点,激发学生学习程序设计的兴趣。

二、案例教学,体会编程的乐趣

程序设计课程的实践性很强,精讲多练是程序设计课程教学的一大特点,案例教学在程序设计教学中有重要的作用,学生可以通过完成任务达到所学知识的目的,体验到编程成功的乐趣。如果学生只听不练根本达不到学习的目的。学生在完成课后习题时积极性不高,兴趣不浓,甚至想抄作业应付老师。只有让学生动手编制他们感兴趣的程序,学生才会有成就感,才会对课程产生兴趣,学起来才会从容自如。比如:第一堂课讲VB界面设计,可设计一个QQ登录界面。学完选择语句后,可以设计QQ登录小程序,也可以让学生动手编制判断输入的年份是否是闰年,程序结束就能验证自己编的正确与否。诸如此类能解决日常问题的程序,学生非常喜欢。这种探究式的动手实践练习,以发展学生探索能力为主线组织实践,以培养探究性思维的方法为目标,以基本的教材为内容,使学生通过再发现的步骤进行主动实践的过程,产生一种探索和发现的心理。

三、讨论教学,重视师生间、生生间的多边交流

对于目前教师占主导地位的教学模式,学生处于被动的状态,缺乏学习的积极性,不能发挥自己的创造力和想象力。

讨论式教学是新课程改革所提倡的一种主要教学模式,它充分地体现自主学习、合作学习和探究学习的'新课程理念。所谓讨论式教学法,是指经过精心设计和组织,在教师的指导下,在学生独立思考的基础上,让全班学生或小组成员围绕某一个中心问题,各抒己见,发表自己的看法,并通过师生间、生生间的多边交流,互相探讨,以寻求获取真知和全方面地提高学生自主学习能力的教学模式。例如:分析循环语句格式for……next……可以这么安排教学活动,将学生分成四组讨论下题,然后每组完成一小题,进一步了解For/next语句的格式。阅读计算1×2×3×4×5的程序,回答以下问题,并上机验证:

Dim i As Interger

Dim s As Interger

S=1

For i=1 To 5 step 1

s=s*I

Next i

1)如果把程序中的step1改成step-1,应该如何修改程序。

2)如果程序中缺少s=1,最终s的值是多少?

3)如果计算1×2×3×…×N,应该如何修改程序。

4)如果计算2×4×6×8×…×1000,应该如何修改程序。

通过这个环节的设置,当学生把循环结构的几种情况都掌握后,教师可以通过自己的教学安排来积极引导学生交流,同时也参与学生的交流,从而调动学生学好《算法与程序设计》的积极性,激发并满足学生的情感需要,特别是对知识的渴望与兴趣,从而更好地完成教学任务。

四、反馈教学,注重总结与评价

教师在最后要进行总结与评价,对学生新的想法、创新点进行表扬,对不足之处进行指点,让学生快乐地学习。

课堂练习是学生对所学知识的掌握情况及时、真实的反馈,教师通过进行有效的上机练习评价,直接获取学生信息,把握学生知识掌握和能力发展的程度,及时调整教学设计,充分利用好VB程序设计软件强大的功能,编好程序后运行,如果程序错误,会有相应的提示,一方面让学生及时订正,另一方面要加强对错误原因的分析,以便在以后的教学中有针对性地加以纠正。有些学生会有创新的思维编写的小程序,对好的程序可以全班传阅,以资互相学习。要多鼓励学生多动手动脑,大胆利用所学的程序结构,设计出多元的小程序。应尽量少用负面的语言,对差的作业应视具体情况给予指点和帮助。

VB语言所涉及的内容多,知识面宽,在短短的课堂教学中,要让学生完全掌握是不可能的,所以学生课外自学是一个重要的环节。另外,教师还应重视自己创新能力和将专业知识应用到社会实践中的能力的培养,利用VB结合实际开发一些小型的应用程序系统,使自己更好地掌握它,只有这样教师在教学中才能更好地进行目标任务的选编、设计和组织,探索出更适应学生的教学方法,取得更好的教学效果。

篇7:算法教学设计

教学内容:信息技术九年级(下)第4节《算法与顺序、选择结构程序》一、《算法与流程图》

教学内容:

知识与技能:(1)了解编制程序解决问题的大致过程(2)了解算法概念,了解流程图(3)会用流程图设计和描述算法。

过程与方法:在自主学习常用的程序流程图符号中了解流程图,在小组合作绘制“计算商品金额”流程图中加强对算法的理解,学习用流程图设计和描述算法。

情感、态度与价值观:教育学生正确对待学习生活中的实际问题,培养学生多角度思考问题的能力。

教学重点:会用流程图设计和描述算法。

教学难点:会用流程图设计和描述算法。

教学方法:任务驱动法、小组学习法、评价交流法

教学准备:多媒体教学软件、多媒体教学课件

课时安排:

教学过程:

一、编制程序解决问题的大致过程

师:同学们,在前面的学习中,我们学了设计“我的计算器”程序界面,并为它编写代码,之后又为编程打下了一定的基础。那么,现在请同学们讨论交流一下,编制程序解决问题的大致过程是怎么的呢?

生:讨论交流

(设计意图:在小组讨论交流中学会合作。)

2、师:组织、引导学生在全班范围内交流编制程序解决问题的.大致过程。

(首先分析与确定实际问题中各种数据间的关系,然后设计出解决这个问题的方法和步骤,再使用某种程序设计语言编制程序,达到最终解决问题之目的。在程序设计中,把解决问题的方法和步骤称为算法。)

生:在全班范围内交流。

(设计意图:共享成果。)

二、用自然语言描述“计算商品金额”的步骤

1、师:提出任务:在第1课的巩固练习中,我们曾经绘制过一个“计算商品金额”程序的界面,商店规定:如果顾客购买某一种金额超过20元,超过部分可以享受九五折优惠。下面我们设计一个计算顾客购买商品后实际应支付多少钱的算法。

生:学生思考问题

(设计意图:引导学生发现问题。)

2、师:下面先让我们来设想一下,怎样解决?

提问:以下每一步提问做什么,诱导学生按日常逻辑思维思考回答。

第一、首先要确定这种商品的单价和购买这种商品的数量。

第二、计算顾客所购买商品的金额,即单价和数量的乘积。

第三、判断顾客所购买商品的金额是否超过20元

第三、如果是,则超过部分按照九五折计算。如果不是,不享受优惠,仍旧按照单价和数量的乘积付款。

第四、计算得到最后的应付款 X*1.5*(0.8),给出最后应付款值。

2、师:提问:好,同学们都做得很好,思路都很清晰,其实上面的描述我们还可以简化一下。

第1步:输入商品的单价和顾客购买商品的数量,并分别送入变量X和Y中。

第2步:计算的,并将其送入变量Z。

第3步:判断Z的值是否大于20,若Z>20,执行第4步;否则,执行第5步。

第4步:计算表达式 20+(Z-20)*0.95 的值,并将计算结果再送入变量Z。

第5步:显示顾客实际应支付的金额Z。

第6步:结束计算。

三、常用的程序流程图符号

1、师:用文字叙述描述算法比较繁且不直观,人们又想出了一种用流程图描述算法的方法。用流程图设计和描述算法直观形象,便于理清思路,易于理解。课本P39表4.1列出了国际上通用的绘制流程图的符号及其含义,请同学们自主学习。

2、观察表4.1,了解常用的程序流程图名称、符号、意义

(设计意图:培养学生的自主学习的习惯和能力。)

3、师生学习常用的程序流程图符号

四、绘制“计算商品金额”流程图

2、师:结合表4.1,对上述用自然语言叙述的计算商品金额的算法绘制流程图。

生:操作

培养学生的自主学习的习惯,引导他们学会如何去发现、去思考,如何去寻找解决问题的方法

五、试试看

1、师:同学们已会根据实际情况绘制流程图,我们比一比看哪位同学又快又好地完成课本P40的“试试看”。(设计一个算法并画出流程图,找出并显示任意3个数中的最大数。)

生:明确要完成的操作要求。

2、生:操作

师:巡视并发现操作又快又好的同学

3、操作快且好的学生展示作品,其他学生进行评价。

(设计意图:在学生掌握一定的技能基础上进行这样挑战性活动,更能激发学生的兴趣,让更多的学生展示自己的作品,让他们体味成功的快乐。)

六、师生总结

七、课外拓展

给课本P52“巩固练习”第3题绘制流程图。

(设计意图:拓展学生课外学习空间,同时,也为下一节课的学习奠定基础。)

篇8:先序遍历非递归算法

#define maxsize 100

typedef struct

{

Bitree Elem[maxsize];

int top;

}SqStack;

void PreOrderUnrec(Bitree t)

{

SqStack s;

StackInit(s);

p=t;

while (p!=null || !StackEmpty(s))

{

while (p!=null)            //遍历左子树

{

visite(p->data);

push(s,p);

p=p->lchild;

}//endwhile

if (!StackEmpty(s))        //通过下一次循环中的内嵌while实现右子树遍历

{

p=pop(s);

p=p->rchild;

}//endif

}//endwhile

}//PreOrderUnrec

篇9:算法:归并算法的递归与非递归形式

归并算法是将两个或两个以上的有序表组合成一个新的有序表,它的原理是:假设初始序列含有n个记录,则可以看成是n个有序子序列,两两归并,得到[n/2]个有序子序列,再次归并……不断重复直至归并到长度为n的有序序列,这样的排序方法称为2路归并排序,

实例一:递归形式的2路归并算法

#define MAXSIZE 4int data[MAXSIZE] = {2,1,0,3};/** 功能:将from数组min到max-1下标数据排好序,最后的结果是to[min]...to[max-1]* 输入:1.待排序的数组;2.排好序的数组;3.相关位置设定* 输出:无*/void merge(int from[],int to[],int min,int m,int max){ /*将from[]数组两侧元素排序放在to[]上,直至一侧“溢出”*/ int i = min , j = m+1; while(min<=m && j<=max) { if(from[min]< from[j]) to[i++] = from[min++]; else to[i++] = from[j++]; } /*由于子序列已经排好序,当上面的循环结束时,将还没“溢出”的一侧剩余元素直接赋给后面的to[]*/ if(min<= m) for(int k =0; k<=m-min; k++) to[i+k] = from[min+k]; if(j<= max) for(int k = 0; k<= max-j; k++) to[i+k] = from[j+k];}/** 功能:不断分组归并* 输入:1.待排序的数组;2.排好序的数组;3.相关位置设定* 输出:无*/void mSort(int from[],int to[],int min,int max){ if(min == max) // 不断分组,直至拷贝了一份原数组 to[min] = from[max]; else { int m = (min+max)/2; int temp[MAXSIZE]; // 创建一个新的数组来存储排序的子序列 mSort(from,temp,min,m); // 此时中间下标变为最大下标 , temp数组递归后为下一层的要megre的to数组 mSort(from,temp,m+1,max); // 此时中间下标+1变为最小下标 merge(temp,to,min,m,max); // 分到不能再分就开始不断归并 }}void print(int *data){ for(int i = 0; i< MAXSIZE; i++) printf(“%d ”,data[i]); printf(“\n”);}void main(int argc, char* argv[]){ print(data); mSort(data,data,0,MAXSIZE-1); print(data);}打印结果:

由程序可以看出,每分组一次就要创建一个临时存放数据的数组,这无疑会降低性能,所以可以采用非递归形式的归并算法,

<?www.2cto.com/kf/ware/vc/“ target=”_blank“ class=”keylink“>vcD4KPHA+PGJyPgo8L3A+CjxwPsq1wP22/qO6t8e13bnp0M7KvbXEMsK3uemyosvjt6g8L3A+CjxwPjwvcD4KPHByZSBjbGFzcz0=”brush:java;“>#include ”stdio.h“ #include ”malloc.h“#define MAXSIZE 8int data[MAXSIZE] = {5,2,1,7,6,4,0,3};/** 功能:归并排序,自下而上,不采取递归方式,而是通过算法自下而上* 输入:待排序数组,数组元素个数* 输出:无*/void merge_sort(int *list, int length){ int i, left_min, left_max, right_min, right_max, next; int *tmp = (int*)malloc(sizeof(int) * length); // 由此至终都是和这个动态分配的数组打交道 for (i = 1; i< length; i *= 2) // 当i = 1时代表要归并的序列大小为1,依次类推 { /*当前大小的序列需要归并的次数,通过改变left_min来移动*/ for (left_min = 0; left_min< length - i; left_min = right_max) { right_min = left_max = left_min + i; // 序列切分为两半后相关位置设定right_max = right_min + i;if (right_max >length) right_max = length;next = 0; /*将两组序列排序进入tmp直至一段”溢出“,尤其注意right_min的移动*/ while (left_min< left_max && right_min< right_max) tmp[next++] = list[left_min] >list[right_min] ? list[right_min++] : list[left_min++];/*如果溢出的是右端,待排序的数组读取左端后面较大的数据*/while (left_min< left_max) list[--right_min] = list[--left_max];/*将之前存放到tmp的数组的数据继续读到数组*/while (next >0) list[--right_min] = tmp[--next]; } } free(tmp);}void main{ print(data); merge_sort(data,MAXSIZE); print(data);}

打印结果基本同上

归并排序很重要的一个思想是,在归并的子序列是已经排好序的,这也是其中算法的关键。归并排序的时间复杂度是O(nlogn),处理大量数据时性能远比简单排序算法要好,其中非递归归并算法的空间复杂度比递归归并算法的要小,整体性能较好。

篇10:python实现排序算法

-03-03python局部赋值的规则

-02-02python发布模块的步骤分享

2014-03-03Python 列表(List)操作方法详解

2014-02-02go和python调用其它程序并得到程序输出

2014-04-04python中的实例方法、静态方法、类方法、类变量和实例变量浅析

2014-05-05Python random模块(获取随机数)常用方法和使用例子

-12-12python cookielib 登录人人网的实现代码

-09-09Python httplib,smtplib使用方法

2013-11-11pyramid配置session的方法教程

2014-03-03python实现k均值算法示例(k均值聚类算法)

篇11:python实现排序算法

最近更 新

用python实现的去除win下文本文件头部BOM

Python实现的金山快盘的签到程序

python操作MySQL数据库具体方法

python操作日期和时间的方法

删除目录下相同文件的python代码(逐级优化

python 中的列表解析和生成表达式

Python实例分享:快速查找出被挂马的文件

python列表去重的二种方法

python查找第k小元素代码分享

Python 网络编程说明

热 点 排 行

Python入门教程 超详细1小时学会

python 中文乱码问题深入分析

比较详细Python正则表达式操作指

Python字符串的encode与decode研

Python open读写文件实现脚本

Python enumerate遍历数组示例应

Python 深入理解yield

Python+Django在windows下的开发

python 文件和路径操作函数小结

python 字符串split的用法分享

篇12:python简单实现基数排序算法

作者:atupal 字体:[增加 减小] 类型:

这篇文章主要介绍了python简单实现基数排序算法,仅用4行代码即可实现基数排序算法,非常简单实用,需要的朋友可以参考下

本文实例讲述了python简单实现基数排序算法,分享给大家供大家参考。具体实现方法如下:

from random import randintdef main: A = [randint(1, 99999999) for _ in xrange(9999)] for k in xrange(8): S = [ [] for _ in xrange(10)] for j in A:S[j / (10 ** k) % 10].append(j) A = [a for b in S for a in b] for i in A: print imain()

希望本文所述对大家的Python程序设计有所帮助,

篇13:python 实现插入排序算法

-01-01python调用cmd命令行制作刷博器

-10-10python笔记(1) 关于我们应不应该继续学习python

2014-01-01python文件比较示例分享

-11-11python中文乱码的解决方法

2014-06-06测试、预发布后用python检测网页是否有日常链接

2014-02-02Python操作列表的常用方法分享

2014-06-06用python登录Dr.com思路以及代码分享

2013-11-11pyramid配置session的方法教程

2014-01-01python学习手册中的python多态示例代码

2014-01-01Python中for循环详解

篇14:python 实现插入排序算法

最近更 新

Python操作Mysql实例代码教程在线版(查询

python中的对象拷贝示例 python引用传递

python类定义的讲解

windows系统中python使用rar命令压缩多个

php使用递归与迭代实现快速排序示例

教你安装python Django(图文)

python目录操作之python遍历文件夹后将结

linux系统使用python监测网络接口获取网络

python self,cls,decorator的理解

Python 字符串操作方法大全

热 点 排 行

Python入门教程 超详细1小时学会

python 中文乱码问题深入分析

比较详细Python正则表达式操作指

Python字符串的encode与decode研

Python open读写文件实现脚本

Python enumerate遍历数组示例应

Python 深入理解yield

Python+Django在windows下的开发

python 文件和路径操作函数小结

python 字符串split的用法分享

篇15:高效实现Josephus算法

Josephus定义:假设N个人编号1-N,围成圈,从1号开始报数,报到M时,此人退出,然 后继续从1开始报数,直到所有人退出为止。简单的实现是使用循环单链表,设置一个计数器 count,当count == M ,删除当前节点,并将count重置。

假设M = 9,N = 5;

这里有两处地方可以优化:

1.当M>N时,取M`= M mod N,即M` = 9 % 5 = 4;报数到9与报数到4效果一致,但少遍历一次链表;

2.当M` >N / 2时,可逆 向走N - M' + 1步,此时反向走比正向走距离更近,但需要将数据结构设置为循环双链 表。

对于M = 9,N = 5,实现优化后流程如下:

---

链表:1 2 3 4 5

N = 5

M` = 9 mod 5 = 4

M` = 4 >N / 2 = 2

反走(5 - 4 + 1) = 2 步,删除节点4,此时起点在节点3;

---

链表:1 2 3 5

N = 4

M` = 9 mod 4 = 1

M' = 1 < N / 2 = 2

正走1步,删除节点5,此时起点在节点3;

---

链 表:1 2 3

N = 3

M` = 9 mod 3 = 0

M` = 0 < N / 2 = 1

正走0步,删除节点3,此时起点在节点2;

---

链表:1 2

N = 2

M` = 9 mod 2 = 1

M` = 1 = N / 2 = 1

正 走1步,删除节点1,此时起点在节点2;

---

链表:2

N = 1

M` = 9 mod 1 = 0

M` = 0 = N / 2 = 0

正走0步,删除节点2,此时 链表空;

算法C实现:

#include

#include ”dlinkedlist.h“

#define SIZE 5

#define N SIZE

#define M 9

static List init;

void print(List l);

void process(List l);

int main()

{

List josephus = init();

print (josephus);

process(josephus);

return 0;

}

/* 初始化链表 */

static List init()

{

int i;

List josephus = CreateList(1);

Position p = josephus;

for (i = 2; i <= SIZE; i++)

{

Insert(i, josephus, p);

p = NextPosition(p);

}

return josephus;

}

/* 打印链表 */

void print(List l)

{

if (l == NULL)

return;

printf (”%d “,Retrieve(l));

Position p = NextPosition(l);

while (p != l)

{

printf(”%d “,Retrieve(p));

p = NextPosition(p);

}

printf(”n“);

}

/* Josephus处理 */

void process(List l)

{

int n = N;

int m = M % n;

int i;

Position p = l;

while (n >1)

{

if (m >n / 2)

{

for (i = 0; i < n - m + 1; i++)

p = PreviousPosition(p);

}

else

{

for (i = 0; i < m; i++)

p = NextPosition(p);

}

p = PreviousPosition(p);

printf (”%d outn“,Retrieve(NextPosition(p)));

Remove (NextPosition(p), &l);

n--;

m = M % n;

printf(”current: “);

print(l);

}

}

测试结果:

1 2 3 4 5

4 out

current: 1 2 3 5

5 out

current: 1 2 3

3 out

current: 1 2

1 out

current: 2

这里给出循环双链表数据结构 ADT和实现

假定链表不带哨兵节点,

dlinkedlist.h

typedef int ElementType;

#ifndef DLINKEDLIST_H_INCLUDED

#define DLINKEDLIST_H_INCLUDED

struct Node;

typedef struct Node *PtrToNode;

typedef PtrToNode List;

typedef PtrToNode Position;

List CreateList (ElementType X);

void DisposeList(List L);

int IsEmpty(List L);

int IsLast(Position P, List L);

Position Find(ElementType X, List L);

void Delete(ElementType X, List L);

void Remove(Position P, List * L);

void Insert(ElementType X, List L, Position P);

void DeleteList(List L);

Position NextPosition(Position P);

Position PreviousPosition (Position P);

ElementType Retrieve(Position P);

#endif // DLINKEDLIST_H_INCLUDED

fatal.h

#ifndef FATAL_H_INCLUDED

#define FATAL_H_INCLUDED

#include

#include

#define Error(Str) FatalError(Str)

#define FatalError(Str) fprintf(stderr, ”%sn“, Str), exit(1)

篇16:PSORP航迹规划算法设计与实现

PSORP航迹规划算法设计与实现

针对飞行器航迹规划与重规划进行了研究,提出了一种基于粒子群的航迹规划与重规划算法(Particle Swarm Optimization RoutePlanner,PSORP).在该方法中,使用了特定的粒子群编码方式、构造了适当的.适应度函数并建立了有效的航迹评价规则.仿真实验表明该算法可以有效利用各种环境信息,在实时环境下处理各种航迹约束,并最终获得近似的最优航迹.

作 者:于鑫 YU Xin  作者单位:山东航空股份有限公司,山东,青岛,266071 刊 名:科技信息 英文刊名:SCIENCE & TECHNOLOGY INFORMATION 年,卷(期): ”"(25) 分类号:P4 关键词:智能决策支持   粒子群优化   航迹规划   实时规划  

篇17:小学简便算法教学设计

教学目标:

1.使学生理解并把握加、减法的一些简便运算,并会在实际计算中应用.

2.通过学习加、减法的简便运算,逐步培养学生的简算能力及运用知识解决实际问题的能力.

教学重点:学会并把握加、减法简便运算的方法.

教学难点:明确要加的数或要减的数是接近哪个整百、整十数;加上或减去整百、整十数,多加了或多减了多少.

教具和学具:

教具:口算卡片.

教学步骤:

(一)铺垫孕伏

1.减法的意义是什么?

2.根据1745980=2725,直接写出下面的得数.

2725-1745=2725-980=()

3.口算下面各题.

57476-30024720

352-1530011360

(二)探求新知

1.导入:利用复习中的口算最后一道题11360.

教师叙述:同学们会很快地计算出11360的得数,因为60是一个整十数.那么,怎样很快计算出象11359这样算式的得数呢?首先我们要研究加、减法的一些简便算法.(演示“加、减法的简便算法”,出示课题)下载

2.教学例1.(演示“加、减法的简便算法”,出示例1)下载

育民小学图书室新买来130本图书.其中故事书46本,科技书34本,其余的是连环画.买来连环画多少本?

(1)让学生用两种方法自己解答.

1304634130(4634)

=8434=13080

=50(本)=50(本)

(2)学生讨论:两种算法结果怎样?哪一种算法比较简便?

(3)教师提示:

从130里依次减去46和34,等于从130里减去46与34的和.

3.学例2.(演示“加、减法的简便算法”,出示例2)下载

计算295-128-72.

(1)让学生观察题里的数目有什么特点?

(2)让学生联系例1同桌进行讨论怎样计算比较简便,为什么?

(3)教师强调:从295中依次减去128和72,等于从295中减去128与72的和.而这两个数的和恰好是整百数,所以,先算(12872),再算295-200,计算起来比较简便.

4.完成55页“做一做”

用简便方法计算下面各题.

567-55-145470-254-46

(三)巩固发展(演示“加、减法的简便算法”,出示练习)

下面各题,怎样算简便就怎样算.

263-96-104970-132-68

400-185-15472-126-124

168-28-72437-137-63

24418256200-173-27

1246876

(四)全课小结

这节课学习了加、减法简便运算的方法,希望同学们在实际计算中可以使计算简便,提高同学们的计算能力.

(五)布置作业

教材58页7、18题.

7题:下面各题,怎样算简便就怎样算.

263-96-104970-132-68

400-185-15472-126-124

18题:学校买来2500张白纸,第一次用去365张,,第二次用去335张,还剩多少张?

篇18:小学简便算法教学设计

教学内容:书上67—68页,例3例4,练习十九第1—5题

教学目的:使学生学会两种简便算法。

1、一个数连续除以两个一位数,如果这两个一位数的乘积是整十数时,就可以把这两个一位数先乘起来,再用它们的积去除被除数。

2、一个数除以一个两位数,如果能把除数分解成两个一位数,而其中一个数除被除数时较简便时,可用这两个一位数去依次除被除数。

数学过程:

一、复习:

1、口算:

360÷90180÷30270÷90

420÷7630÷9450÷5

2、填空:

18=()×()24=()×()

35=()×()63=()×()

可能出现各情况都可以填。

3、出示应用题(小黑板出示)

四年级同学参加春季植树,把90人平均分成2队,每队分成3组,每组有多少人?

学生先读题—>指名口述解法—>提示用不同方法解—>板书过程

(1)90÷2÷3(2)90÷(3×2)

=45÷3=90÷6

=15(人)=15(人)

二、新课

1、引入新课

(1)比较复习中的两种解法,得出:

90÷2÷3=90÷(2×3)

(2)启发学生说出哪种解法简便,并总结规律

一个数连续用两个数除,每次都能除尽时,可先把两个除数相乘,用它们的积积除这个数,结果不变。

(3)用一个关系式表达出来并加以强调

a÷b÷c=a÷(b×c)

有时,一个数连续除以两个一位数,改成除以这两个一位数的积,计算比较简便。

2、教学例3390÷5÷6

(1)看:题型结构……..5×6=30

(2)想:计算方法……..390÷(5×6)

(3)算:用简便方法计算

390÷5÷6

=390÷(5×6)

=390÷30

=13

3、补充例题:210÷3÷5

(1)问:怎样算比较简便

(2)同桌讨论并尝试练习

(3)评讲:210÷3÷5

=70÷5

=14

指出:遇到不同题型要根据具体情况作具体分析,找出恰当方法。

4、练习:书上68页作一作的题(教师巡视,发现问题,集体订正)

5、教学例4420÷35怎样算简便

(1)启发:能否用刚才学的规律反过来用

a÷(b×c)=a÷b÷c

(2)学生尝试练习

(3)指导掌握简算方法

420÷35

=420÷(7×5)

=420÷7÷5…………….先除以7较简便

=60÷5

=12

(4)总结规律:

一个数除以两位数,改成连续除以两个一位数,计算较简便。

(5)强调:a÷(b×c)=a÷b÷c

6、练习:书68页做做的题(教师巡视,发现问题,集体订正)

7、小结:

(1)今天我们学了什么内容?

(2)指出:今天我们学了除法的两种简便算法,强调a÷(b×c)óa÷b÷c

三、巩固练习

1、填空:

210÷5÷6=210÷(×)

280÷35=280÷()÷()

420÷3÷7=420÷(×)

360÷45=360÷()÷()

2、判断:

630÷7÷9=630÷7×9()

750÷25÷3=750÷(25×3)()

450÷15÷3=450÷(15÷3)()

3、练习十九,第1题,第一、二横行,第二题第一横行,四、五题。

计算机专业课复习数据结构复习重点

数据结构课程总结

计算机二级VB上机考试答题攻略

计算机二级上机试题

小学生数独课件

考研计算机专业大纲解析之数据结构

排序算法总结

数独比赛策划书

Google笔试经验

数据结构实验报告

《递归算法的实现》教学设计
《《递归算法的实现》教学设计.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【《递归算法的实现》教学设计(精选18篇)】相关文章:

编译原理期末总结复习2023-04-02

教师的教案怎么写2022-12-12

教师活页教案2023-12-02

教师教案模板2024-04-19

美团网 电话面试2023-09-04

备课教案2022-05-07

近邻作文2022-10-26

百度笔试题2023-06-01

百度网上笔试试题及答案2022-07-10

埃森哲校招阅读理解类笔试题2023-01-19

点击下载本文文档