内容正文:
汉诺塔(一)
(
今日任务:
)
今天, 我们将以小时候大家都玩儿过的汉诺塔游戏作为原型, 用 scratch 编程实现它, 汉诺塔游戏的规则是这样的:
在 A 柱上有 N 个圆盘, 从下到上分别按由大到小排列,借助中间的 B 柱,将 A 柱上的 圆盘按照一开始的叠放顺序全部移动到 C 柱,移动过程中无论各圆盘位于哪根柱上,都必须 遵循上小下大的摆放规则。那么我们接下来分别看看有 1、2、3 个圆盘时的移动情形,看看 你能不能从中找到些规律出来!
只有一个圆盘时的情形:
A 柱 B 柱 C 柱
一步就可以移动过来:
A 柱
B 柱
C 柱
只有二个圆盘时的情形:
A 柱
B 柱
C 柱
第一步:
A 柱
B 柱
C 柱
第二步:
A 柱
B 柱
C 柱
第三步:
A 柱 B 柱 C 柱
只有三个圆盘时的情形:
A 柱
B 柱
C 柱
第一步:
A 柱
B 柱
C 柱
第二步:
A 柱
B 柱
C 柱
第三步:
A 柱
B 柱
C 柱
第四步:
A 柱
B 柱
C 柱
第五步:
A 柱
B 柱
C 柱
第六步:
A 柱
B 柱
C 柱
第六步:
A 柱
B 柱
C 柱
我们似乎可以从这样儿的移动中找到某些规律
移动时,盘子其实都遵循着这样儿的规律:
无论是移动多少个圆盘,都可以看做是现将 A 柱上除最大的圆盘以外的所有圆盘移到 B 柱,然后, 移动 A 柱上最大的圆盘到 C 柱, 最后再将 B 柱上的所有圆盘移动到 C 柱上,结 束。
比如三个圆盘时:
(
B
柱
) (
C
柱
)A 柱
(
B
柱
) (
C
柱
)A 柱
(
B
柱
) (
C
柱
)A 柱
(
B
柱
) (
C
柱
)A 柱
核心算法简述:
Step1:如果盘子数=1,那么直接执行第 2 步,否则执行第 3 步
Step2:盘子从 A 柱直接移动到 C 柱,执行第 6 步
Step3:核心算法(可传递参数)
执行: A 柱是起点柱, B 柱作为终点柱,C 柱作为中转柱 ①
Step4:执行:将盘子从起点柱移动到终点柱 ②
Step5:核心算法(可传递参数)
执行: B 柱作为起点柱, C 柱作为终点柱, A 柱作为中转柱 ③
(
A
柱变起点柱,
B
柱变终点柱,
C
柱
变中转柱
) (
B
柱变起点柱,
C
柱变终点柱,
A
柱
变中转柱
) (
N
) (
结束
)
(
本课重难点:
)
(1)通过汉诺塔的操作演示可以理解推导出的递归算法即本程序的核心算法。
(2)能够正确理解本程序的编写思路, 今后遇到同样的问题可以按照本程序所发现的规律 去解决问题。
(
任务解读(
Flowchart
):
)
开始
输入盘子个数(3~5)
(
盘子个数
=1
?
)
Y
盘子从 A 柱(起点柱)直接 移动到 C 柱(终点柱)
学科网(北京)股份有限公司
$$
汉诺塔(二)
(
跟我来挑战
Follow me:
)
第一步:启动 scratch 软件;
第二步:点击上方的“文件” → “保存” →保存到桌面,文件名:汉诺塔 → 点击“保存”;
(第二步很很很重要,我希望所有的学生都能养成及时保存作品的好习惯!)
第三步: 确定背景
第四步:确定角色(全部手绘完成,ABC 柱等大小,1-yellow 柱最大,5-red 最 小 )
第五步: 脚本讲解
学科网(北京)股份有限公司
=
2,3,4,5号盘子的脚本请同学自己尝试编写完毕吧!
(
程序运行结果:
)
我输入了4,继续
(
课后思考:
)
(1) 将2,3,4,5,号盘子的脚本编写完整并能成功运行!
(2) 想 一 想,6,7,8,9甚至更多盘子的时候,程序是否需要改变?有过需要改变你知道如 果改变么?
$$