C++编程《第10课 复杂递归》教学设计.docxVIP

  • 1
  • 0
  • 约2.85千字
  • 约 5页
  • 2026-03-10 发布于广西
  • 举报

C++编程《第10课 复杂递归》教学设计.docx

PAGE

PAGE1

复杂递归

教学目标

1.知识与技能

强化加深对递归的理解和运用

运用递归解决复杂的问题.

2.过程与方法:

学习流程:讲授——模仿——练习

通过课堂练习,巩固课堂内容。

教学重点、难点

【重点】

汉诺塔问题递归求解

快速排序算法原理

【难点】

汉诺塔问题建模与描述

快速排序的思想及其实现

课时安排

课时安排:120分钟

四、上课准备

课程相关ppt、白板、白板笔、积分卡

课前检查电脑、投影仪、网络是否有故障,及时修复。

五、教学活动

活动时长

教学活动

注意事项

课前准备

老师准备学生电脑,保证电脑能正常使用;打开投影仪,打开上课课件,以最饱满的热情迎接学生!

提前10分钟准备

开场白

欢迎各位同学回到吉码信息学课堂。

引入

递归是一个强大的思维方法.有一些看起来特别复杂的问题,实际上可以用递归来解决。

今天我们就来看一些比较复杂的问题。

学习内容(1)

ppt5.汉诺塔问题

根据ppt5、pp6,来介绍汉诺塔问题。打开一个预先准备好的汉诺塔小游戏网页,给学生体验游戏的玩法和规则。

【提问】请问同学们,大家认为需要多少个参数才能描述把汉诺塔从一个柱子移动到另外一个柱子。

ppt7问题建模

根据ppt8-12讲解汉诺塔问题具体是如何用四个参数来描述的。

注意预先熟悉内容,不播放后面的ppt文字,先板书讲解,结合ppt8的动画,让学生了解递归调用是如何把问题规模缩小的。

参数设定为汉诺塔的层数n,以及三个柱子的代号。够了没有呀?

暂且认为够了(实际上就是这样描述就可以了),那么我们用hannoi(intn,chara,charb,charc);来描述汉诺塔问题的求解。

【提问】为什么a,b,c是变量而不是常量?

【参考答案】因为移动汉诺塔,需要从不同的柱子移动到最终状态,如果使用的不是变量,就相当于把柱子固定了。而移动过程需要从不同的柱子开始,借助不同的中间辅助柱子,移动到不同的目标柱上。

问题模型:hannoi(n,‘a,‘b’,‘c)代表的涵义是:把n层汉诺塔,从a号柱子移动到c号柱子,b号柱子是辅助柱。

要想移动n层汉诺塔,从a柱子移动到c柱子,必须先把n-1层汉诺塔从a柱子,借助c柱子移动到b柱子。

这个过程的描述是:hannoi(n,‘a,‘c,‘b);

然后把最后一层移动到c柱子,操作是:cout‘a-‘c;

最后我们把n-1层汉诺塔从‘b’柱子,借助‘a’柱子移动到‘c’柱子;

这里我们就看到变量的作用了:

我们如果只写cout‘a-‘c;

那么只能打印a-c这一种操作,汉诺塔在其他起始柱,有其他目标柱时怎么办?其实还是从第一个参数移动到最后一个参数,即从起始柱移动到目标柱。我们第一个参数就存储起始柱的编号,第二个参数就存储辅助柱的编号,第三个参数就存储目标柱的编号。那么调用函数的时候就只写从起始柱子编号移动到目标柱子编号,就能处理不同起始和目标了。这样才能根据实际情况输出不同的操作。

每一次递归调用,都会递归到边界再返回本层递归。当只有一层汉诺塔的时候,直接从起始柱移动到目标柱即可。

按照ppt12的示例,现场一边讲解原理,一边写语句,逐行讲解如何用递归的方式来解决汉诺塔问题。

学习内容(2)

ppt13.快速排序的基本概念

快速排序运用的是分治思想。首先举一个例子,让学生了解为什么分治能够减小算法的时间复杂度。

如果我们对一个序列进行冒泡排序,我们一般的花费的时间主要由序列的长度的平方决定,记为O(n2)。假设我们对一个长度为100的序列冒泡排序,那么时间复杂度为O(10000).但如果我们把序列分为两个部分,每个部分50个元素,以某一个值为界限,一边都小于x,另一边都大于x,然后两个序列分别排序,时间复杂度则为:O(502+502),即O(5000)。如果我们一直分治下去,2个元素一组,那么算法复杂度就成了O(nlogn),当n比较大时,分治以后快了很多很多倍!

所以,快速排序主要的优化思想就是分治。先划分,再用同样的方式处理剩下的分段。

ppt14到ppt23重点内容:快速排序的排序过程

要预先理解快速排序的过程,根据ppt讲解。

快速排序,关键是一次排序的过程。确定key以后,i从左往右寻找,j从右往左寻找,i找比key大的j,找比key小的,操作过程类似于交换了比key大的数和比key小的数,这样一来,一轮排序就把比key大的数放在了一边,比key小的数放在了另一边。

之所以先从右边往左找,是因为要实现交换,把i所在的key位置类似于当成了交换的中间变量使用,保证了数据不丢失。(以第一次交换为例,j找到的第一个值存在了key的位置,但key位置的值已经赋值给了key。i找到的第一个值赋值给了j所在位置,但j所在位置的值已经存在ke

文档评论(0)

1亿VIP精品文档

相关文档