4.3非数值计算-探究“汉诺塔”中的奥秘 教学设计 高中信息技术教科版(2019) 必修1

资源下载
  1. 二一教育资源

4.3非数值计算-探究“汉诺塔”中的奥秘 教学设计 高中信息技术教科版(2019) 必修1

资源简介

《4.3非数值计算》教学设计
——探寻“汉诺塔”中的奥秘
学习目标
1.理解计算机解决非数值问题时的算法分析过程;
2.了解算法设计中的分治策略、递归思想;
3.体验递归的方法,并结合具体问题开展编程实践。
二、学习内容分析
《非数值计算》是教育科学出版社信息技术必修1《数据与计算》第4章第3节的内容。教材本单元主要围绕 “生活中的算法”展开学习,尝试用计算机的视角去解决实际问题。
三、学习者分析
本节课的学习对象为高一年级的学生,他们思维活跃,抽象思维和逻辑思维已初步形成,有一定的分析问题和解决问题的能力。在前面的学习中,他们已经初步了解了算法的概念,会阅读和编写简单的 Python程序,知道python中函数的定义和调用,但大部分学生对已学的函数的定义、引用时参数传递等有所遗忘,需要适当复习和引导。有不少同学对于“汉诺塔”游戏还很陌生。
四、重点难点
重点:理解分治策略、递归思想,运用递归算法解决实际问题;
难点:理解递归算法的原理。
五、教学策略
本节课采用讲授与学生练习相结合方式进行教学。首先通过对前面循环以及可以复用的代码两部分知识的讲解来让学生初步理解递归的概念,接着解决相对较大的问题——“汉诺塔”游戏,让学生进一步理解递归的原理。“计算移动次数”环节是对这一算法的加深以及进一步应用。
教学过程
(一)回顾旧知,引入新知。
回顾循环结构,以及可以复用的代码部分自定义函数知识,引出递归。
设计意图:巩固旧知,学习新知,两者建立联系。
(二)新知讲授
递归是重复调用函数自身,递是描述问题,归是解决问题。直接或间接地调用自身的方法称为递归。可以将递归简单类比为具有自相似性重复的事物。
(1)递归的思想
把规模较大的问题层层转化为规模较小的同类问题求解。对递归而言,递推与回归,二者缺一不可。
(2)递归的“分”-“治”-“合”
1.分:将原有问题分解成K个子问题。
2.治:对这K个子问题分别求解。如果子问题的规模仍然不够小,则将其再分解为K个子问题,如此进行下去,直到问题足够小时,就很容易求出子问题的解。
3.合:将求出的小规模问题的解合并为一个更大规模问题的解,自下而上逐步求出原问题的解。
(三)游戏探秘
本节课以汉诺塔为题为例,看看如何用计算机帮我们解决非数值问题。
1.分析移动过程
活动1:思考并尝试写出1个圆盘、2个圆盘、3个圆盘以及n个圆盘的移动过程。
圆盘个数 1 2 3 n
移动过程
学生完成学案表格 “2个圆盘”,请1名同学展示移动过程。
师生共同分析, 3个圆盘的移动过程,并抽象成规律。
师生共同分析n个木盘的移动过程。
圆盘个数 1 2 3 n
移动过程 A-->C A-->B A-->C B-->C 2个圆盘 A-->B A-->C 2个圆盘 B-->C n-1个圆盘 A-->B A-->C n-1个圆盘 B-->C
设计意图:这一环节主要是借助形象的事物,由易到难,逐步引导学生分析出汉诺塔的移动规律,初步涉及递归的思想,层层调用,为下面抽像的算法及代码编写打基础。
2.编写程序代码
活动1:学生尝试补全代码。
def hanoi(n,____,_____,_____):
if n==1:
print(___,'-->',___)
else:
hanoi(n-1, ____,_____,_____)
print (___,'-->',____)
hanoi(n-1, ____,_____,_____)
活动2:每位同学独立思考,完善hanoi函数定义的代码。
教师观察学生完成情况,注意挑选优秀作品及发现存在的问题。选取1-2个小组展示结果。
程序实现:
def hanoi(n,a,b,c):
if n==1:
print(a,'-->',c)
else:
hanoi(n-1,a,c,b)
print (a,'-->',c)
hanoi(n-1,b,a,c)
n=int(input('请输入木盘的个数:'))
hanoi(n,'A','B','C')
设计意图:这是本节课教学的重点,也是难点之一。在程序实现上,给出大体框架,让学生填空重要内容。整个过程由易到难,学生在设计算法,编写程序,调试运行的过程中一步步形成对递归方法的理解。
3.深入探究:如何计算移动次数?
活动3:如何计算移动次数?大家独立思考,完善学案上的程序。
程序如下:
i=0 #先将变量i清零
def hanoi(n,a,b,c):
global i #全局变量i,用来计数
if n==1:
print(a,'-->',c)
i=i+1 #移动次数i的值增加1
else:
hanoi(n-1,a,c,b)
print(a,'-->',c)
i=i+1 #移动次数i的值增加1
hanoi(n-1,b,a,c)
n=int(input('请输入木盘的个数:'))
hanoi(n,'A','B','C')
print("共移动次数为:", i )
(四)回顾课堂,总结所学。
设计意图:总结课堂,强化知识点:分治法、递归法。
《4.3非数值计算》导学案
组序:_________ 姓名:_______________ 同组成员:____________________
“汉诺塔”游戏源于一个古老的印度传说。
木板上有A、B、C三根杆,A杆上有若干木盘。请用尽可能少的次数把所有木盘从A杆全部移到C杆上。
规定:①每次只能移动一个木盘;②小的木盘只能叠在大的木盘上面。
活动1:思考并尝试写出1个圆盘、2个圆盘、3个圆盘及n个圆盘的移动过程。
圆盘个数 1 2 3 n
移动过程 A --> C ___-->___ ___-->___ ___-->___ 2个木盘 ___-->___ ___-->___ 2个木盘 ___-->___
活动2:小组讨论,完善下面hanoi函数定义的代码。
将完善好的程序输入桌面上“02 hanoi.py”中,调试运行。两位同学互相检查同伴的程序,评价运行结果。
def hanoi(n,____,_____,_____):
if n==1:
print(___,'-->',___)
else:
hanoi(n-1, ____,_____,_____)
print (___,'-->',____)
hanoi(n-1, ____,_____,_____)
n=int(input('请输入木盘的个数:'))
hanoi(n,'A','B','C')
活动3:如何计算移动次数?
将代码“i=i+1”,添加到“03hanoi次数.py”中合适的位置,调试运行。两位同学互相检查同伴的程序,评价运行结果。
i=0 #先将变量i清零
def hanoi(n,a,b,c):
global i #定义一个全局变量i,用来计数
if n==1:
print(a,'-->',c)
_________________
else:
hanoi(n-1,a,c,b)
print(a,'-->',c)
_________________
hanoi(n-1,b,a,c)
n=int(input('请输入木盘的个数:'))
hanoi(n,'A','B','C')
print("共移动次数为:" ,i )

展开更多......

收起↑

资源预览