递归算法的实现教学设计

递归算法的实现教学设计


2024年5月21日发(作者:)

《递归算法》教学设计

蚌埠新城实验学校 徐田柱

一、教学三维目标

知识与技能:

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

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

过程与方法:

学生参与讨论,通过思考、动手操作,掌握递归算法

情感态度与价值:

结合数学中的实例,激发学生的数学建模的意识,培养学生多维度的思

考问题和解决问题。

二、教学重点与难点

重点:

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

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

难点:

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

三、教学策略教

递归算法的实现思想是比较抽象,比较理论化的教学内容。本着培养学生的

发现问题、分析问题、解决问题的意识与能力入手。知识主要是靠学生学会的,

学习就是发生在学生头脑的建构。因此,教师必须明确学生是学习的主体,研究

学生学习的真实心理活动,分析其认识过程、机制及心智变化。确定教学方法。

四、教学环境

网络教室,教学软件DEV C++,大屏幕投影;

五、教学资源准备

从本学科的特点、学生的认知水平及学习心理特征,更好的激发学生的学习

动机与信心,为保持学生的学习激情,设计了一系列难度层层递进的例题和练习。

六、教学过程

(一)情景导入,提出课题

师:从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚对小和尚在讲

故事,他讲的故事是:从前有座山,山里有座庙,庙里有个老和尚和小和尚,老

和尚对小和尚在讲故事……

师:这个故事体现了我们以前提到过的哪种程序设计算法?

生:递归算法

师:是的,引入课题,本节课我们就来深入学习递归算法。

设计意图:用故事引入课题,便于学生理解。

(二)新课探究,导出递归算法程序设计思想

(1)例题1:

求:f(n)=1+2+3+·(n-1)+n

学生很容易想到以前学过的迭代算法:

s=0;

For(i=1;i<=n;i++) s=s+i;

老师提出递归表达式:

1当

n

1 时

f(n)

n

f

(n1)当

n

1 时

递归算法:

long f(int n)

{

if (n==1) return 1;

else return n+f(n-1);

}

引导学生思考,如果把“+”号改成“-”、“*”或“/”,递归表达式如何更改,递归

算法如何改。(学生思考,让学生学会举一反三、触类旁通)。

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

(1)展示递归算法的演算过程,分析演算过程,引导学生总结出,递归算法的

两个必备条件:

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

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

递归算法的实现方式:递归算法是数据层层调用实现的,函数先由上向下

调用,当达到最底层后,再将数值层层向上返回。(在函数层层调用的过程中,

参数的改变)

(2)通过上面的分析,大至的递归算法实现思想我们了解了,那么要思考在编

程过程中如何解决两个问题?

1、怎么将问题推下去?

2、怎么将结果回归?

设计意图:在学生初步认识递归算法的演算过程及特点以后,提出递归算法

程序设计实现的关键问题,层层深入的引导学生思考问题,培养学生分析和发现

问题的能力。

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

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

(4)思考练习:楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一

程序计算共有多少种不同的走法。

假设到达第n个台阶的走法共有f(n) ,那么很容易得到一个数学递归表达

请同学们用算法将这个递归表达式描述出来。

设计意图:培养学生分析问题、解决问题能力,煅练学生“数学建模”能力,

让学生通过实践和思考找出本题的关键,并引出递归算法的解题思想。

(四)回顾例题1和思考练习

引导学生思考刚才的例题和练习,这两个问题完全可以使用递推的原理去解

决,用了递归方法以后反而要不断的回溯,这样的话效率反而降低。

总结出:递归算法使得计算机资源耗费大,效率偏低。(缺点)

设计意图:培养学生深入思考,既然递归算法资源消耗大,效率低,为什么

还使用递归算法呢。为后面的问题做铺垫。

例题2:汉诺塔(Tower of Hanoi)问题 。

假设有三根木桩分别为A、B和C。在木桩A上安置了N个圆盘,由

1当

n

1 时

f(n)

2当 n2 时

f(n-2)f(n1)当

n

2 时

上到下编号为1,2,…N,编号越大的圆盘直径也越大。现需要将A木桩上

的N个圆盘借助B木桩移到C木桩上,且必须按照下述移动规则:

1.直径较小的圆盘永远置于直径比较大的圆盘上;

2.圆盘可任意地由任何一个木桩移到其他的木桩上;

3.一次只能移动一个盘子。

解题思路:

如果 n = 1,则将这一个盘子直接从 A 柱移到 C 柱上。否

则,执行以下三步:

1. 用 C 柱做过渡,将 A 柱上的 (n-1) 个盘子移到 B 柱上;

2. 将 A 柱上最后一个盘子直接移到 C 柱上;

3. 用 A 柱做过渡,将 B 柱上的 (n-1) 个盘子移到 C 柱上。

递归表达式:

算法:

void f(int n,char a,char b,char c)

{

if (n==1) cout<”<

else

{

f(n-1,a,c,b);

cout<”<

A



C

n

1 时

f

(

n

,

A

,

B

,

C

)

n

2 时

f

(n 1,

A

,

C

,

B

),

A



C

,

f

(n 1,

B

,

A

,

C

)

f(n-1,b,a,c);

}

}

设计意图:进一步培养学生发散思维,对于某些问题,如汉诺塔、快速排序

用递归思想解决起来就特别容易,特别是人工智能问题,就依赖于递归提供解决

方案。(优点)

(五)课堂小结

1、理解递归的定义

2、了解递归的特点

3、掌握递归算法的应用

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

(六)展示图片,回归生活

(七)课后作业

思考:如何用递归算法求N个正整数的最大公约数?

感谢您的阅读,祝您生活愉快。


发布者:admin,转转请注明出处:http://www.yc00.com/web/1716300525a2727182.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信