Python解决汉诺塔

本文介绍了汉诺塔的传说,其演变为汉诺塔游戏,规则是将A柱上若干盘子按小叠大原则移到C柱。汉诺塔是程序设计经典递归问题,给出输入输出示例,还阐述思路,即先将n - 1个盘子借助C移到B,再移最大盘到C,最后借助A将n - 1个盘子移到C。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汉诺塔,又称河内塔,根源是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,他要求庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面,等64个金片全部移动到第三个柱子,世界将在一声霹雳中毁灭,而梵塔、庙宇和众僧也逃无可逃。设每秒能搬一个,但还是需要18446744073709551615秒,看来,众僧们耗尽毕生精力也不可能完成金片的移动,宇宙也不会保存这么长时间。

三阶汉诺塔简易示意图:

后来,这个传说故事逐渐演变为汉诺塔游戏。

游戏规则很简单:

1、有三根柱子A,B,C,A上有若干盘子。

2、每次只能移动一个盘子,小的盘子只能叠在大的上面。

3、将所有盘子移动到从A移动到C上。

汉诺塔问题其实不是很难,它还是程序设计中的经典递归问题。

如三阶汉诺塔移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C。

输入:

一个整数N,表示A上有N个盘子。

输出:

若干行,即移动步骤。

例:

输入

3

输出

A --> C

A --> B

C --> B

A --> C

B --> A

B --> C

A --> C

思路:如果有n个盘子,现将n-1个盘子借助C移动到B,然后把最大的盘子移动到C,最后借助A把n-1个盘子移动到C。

详细步骤示意图:

代码:

n=int(input())
def hanno(n, a, b, c):
    '''汉诺塔问题'''
    if n == 1:
        print(a, '-->', c)#大的移动到c
    else:
        hanno(n - 1, a, c, b)#n-1个碟子移动到B
        print(a, '-->', c)
        hanno(n - 1, b, a, c)#n-1个碟子移动到C
print(hanno(n,'A','B','C'))

(完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值