汉诺塔--课后程序(Python程序开发案例教程-黑马程序员编著-第6章-课后作业)
创始人
2024-06-01 14:46:29
0

实例3:汉诺塔

汉诺塔是一个可以使用递归解决的经典问题,它源于印度一个古老传说:大梵天创造世界的时候做了三根金刚石柱子,其中一根柱子从下往上按照从大到小的顺序摞着64片黄金圆盘,大梵天命令婆罗门把圆盘从下面开始按照从大到小的顺序重新摆放在另一根柱子上,并规定:小圆盘上不能放大圆盘,三根柱子之间一次只能移动一个圆盘。问一共需要移动多少次,才能按照要求移完这些圆盘。三根金刚柱子与圆盘摆放方式如图1所示。

 

图1 汉诺塔格局图

本实例要求编写程序,实现输出汉诺塔移动过程的功能。

实例目标

  1. 明确递归函数的递归公式与边界条件
  2. 熟练地定义递归函数

实例分析

我们先来分析一下移动n个圆盘的过程:

(1)假设现在A柱子上只有1个圆盘,此时无需B柱子中转而直接将圆盘从A柱子移动到C柱子上。

(2)假设A柱子上有2个圆盘,此时可以先将小盘子移动到B柱子上,再将大盘子移动到C柱子上,最后将小盘子移动到C柱子上。我们既可以借助柱子B将2个盘子从A移动到C,也可以借助C将2个盘子从A移动到B。

(3)假设A柱子上有3个圆盘,则可以根据移动2个盘子的过程,先借助柱子C将柱子A上的两个盘子先移动到柱子B,将A上的大盘子移动到柱子C上,此时A成为空柱子,再借助柱子A,将柱子B上两个盘子移动到C。

(4)以此类推,假设A柱子上有n个盘子,则可以将n-1个盘子看作一个整体,也就是递归中的子问题。例如,借助柱子C先将柱子A上的n-1个盘子移动到柱子B上,再将柱子A上最大的盘子移动到柱子C上,此时A成为空柱子,最后借助柱子A,将柱子B上n-2个盘子移动到柱子A上,将柱子B上最大的盘子移动到柱子C上,此时B成为空柱子......如此往复。

经过上述分析的过程,递归函数边界条件和递归公式分别如下:

(1)边界条件:当n为1时,直接将盘子从A移动到C;

(2)递归公式:当n为n时,直接将n-1个盘子先从A移动到空柱子B上,再将第n个盘子移动到柱子C上,最后将柱子B上的n-1个盘子移动到柱子C上。

代码实现

def hanoi(n, ch1, ch2, ch3):

    if n == 1:

        print(ch1, '->', ch3)

    else:

        hanoi(n - 1, ch1, ch3, ch2)

        print(ch1, '->', ch3)

        hanoi(n - 1, ch2, ch1, ch3)

plate_nums = int(input("请输入盘子的数量:"))

hanoi(plate_nums, 'A', 'B', 'C')

以上代码首先定义了一个递归函数hanoi(),该函数包含n、 ch1、ch2、ch3共4个参数,其中参数n表示用户输入的盘子数量,ch1、ch2、ch3分别表示柱子A、B、C的名称,该函数中分别处理了1个盘子和n-1个盘子的情况,然后接收用户输入的盘子数量plate_nums,最后调用hanoi()函数输出plate_nums个盘子的移动过程。

代码测试

运行程序,在控制台输入“1”之后的结果如下所示:

请输入盘子的数量:1

A -> C

再次运行程序,在控制台输入“2”之后的结果如下所示:

请输入盘子的数量:2

A -> B

A -> C

B -> C

再次运行程序,在控制台输入“3”之后的结果如下所示:

请输入盘子的数量:3

A -> C

A -> B

C -> B

A -> C

B -> A

B -> C

A -> C

相关内容

热门资讯

如何删除安卓系统信息,安卓系统... 手机里的信息越来越多,是不是感觉自己的隐私都快要被暴露无遗了?别担心,今天就来教你怎么轻松删除安卓系...
国产安卓系统哪个流畅,揭秘哪家... 你有没有想过,手机里的操作系统就像是我们的大脑,有时候它运行得快慢,直接影响我们的使用体验呢?今天,...
安卓怎么刷主机系统,掌握主机系... 你有没有想过,你的安卓手机或者平板,是不是也能像电脑一样,装上各种酷炫的系统呢?没错,今天就要来给你...
安卓系统桌面显示时间,见证日常... 你有没有发现,每次打开安卓手机,那桌面上的时间总是一闪一闪的,仿佛在告诉你:“时间不等人哦!”今天,...
os云刷安卓系统,畅享智能新体... 你有没有想过,你的安卓手机是不是也能像电脑一样,装上各种酷炫的系统呢?没错,今天就要来跟你聊聊这个神...
安卓系统如何装siri,安卓设... 你有没有想过,在安卓手机上也能享受到Siri的智能语音助手服务呢?没错,就是那个在iPhone上呼之...
电脑怎么安卓双系统,电脑安装安... 你有没有想过,一台电脑同时运行安卓和Windows系统,那得多酷啊!想象一边处理工作,一边刷刷抖音,...
linux操作系统与安卓系统,... 你有没有想过,为什么你的手机可以随时随地给你发送信息,而你的电脑却能帮你处理复杂的任务呢?这背后,就...
安卓大屏系统信息,功能与体验全... 你有没有发现,最近手机界的大屏风潮真是势不可挡啊!安卓大屏系统信息,这可是个热门话题呢!想象拿着一块...
苹果7转安卓系统,探索安卓系统... 你有没有想过,从苹果7转到安卓系统会是怎样的体验呢?想象你手中的那个曾经陪伴你度过无数美好时光的苹果...
安卓系统打卡手机推荐,高效便捷... 你有没有想过,每天早上起床后,第一件事就是拿出手机打卡签到?这已经成为现代生活中不可或缺的一部分了。...
安卓手机装了小米系统,小米系统... 你有没有想过,把安卓手机的灵魂换成小米的系统,会是怎样的体验呢?想象原本流畅的安卓系统,突然间被注入...
安卓汽车系统怎么升级,轻松实现... 亲爱的安卓车主们,你是否也像我一样,对汽车系统升级充满了好奇和期待呢?想象你的爱车就像一部智能手机,...
手机怎么变安卓系统,轻松实现系... 你有没有想过,你的手机居然可以变身成为安卓系统呢?没错,就是那个自由度极高的操作系统!今天,就让我来...
安卓仿ios系统横条,打造流畅... 你有没有发现,最近安卓手机上出现了一种特别的新花样——仿iOS系统的横条设计!这可不是简单的模仿,而...
谷歌汽车安卓系统下载,引领智能... 你有没有想过,未来的汽车可能会变成一个移动的智能中心?想象你的汽车不仅能够带你穿梭在城市的大街小巷,...
安卓系统硬件修复软件,全面解析... 手机里的安卓系统突然卡顿,是不是让你头疼不已?别急,今天就来给你揭秘那些神奇的安卓系统硬件修复软件,...
鸿蒙系统比安卓系统大么,体积对... 你有没有想过,手机里的操作系统,就像是手机的心脏,它的大小、性能,都直接影响到手机的使用体验。今天,...
安卓系统 刷机模式,刷机模式操... 你有没有想过,你的安卓手机其实就像一个隐藏着无限可能的宝藏呢?没错,今天就要来跟你聊聊这个宝藏的秘密...
案卷制作系统下载安卓,高效便捷... 你有没有想过,在手机上也能轻松制作案卷呢?没错,现在就有这么一款神器——案卷制作系统,而且它还支持安...