Python-汉诺塔问题--递归

本文详细介绍了汉诺塔问题的背景及其解决方案,并通过Python递归算法实现将不同大小的盘子从A柱移动到C柱的过程,同时遵循大盘在下、小盘在上的规则。

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

汉诺塔问题-----Python(递归)

汉诺塔问题说的是,给汉诺塔中的三根柱子按分别命名为 A,B,C,其中A柱上有n个盘子(n>=1),怎样把A柱上的盘子全部移动到C柱上

移动的规则:

1. 每次只能移动一个盘子
2. 每一次移动完过后必须大盘子在下,小盘子在上

解决思路:

设n为盘子数,A,B,C为每一根柱子
1.当n=1时:直接把A上的一个盘子移动到C上, A->C
2.当n=2时:
	①.把小盘子从A搬到B上, A->B
	②.把大盘子从A搬到C上, A->C
	③.把小盘子从B搬到C上, B->C
3.当n=n时: 
	①.把A上的n-1个盘子搬到B上,调用递归 
	②.把A上剩下的一个最大的盘子搬到C上,A->C 
	③.把B上的n-1个盘子搬到A上,调用递归

代码如下:

def move(n,a,b,c):
	'''
    n: 表示几个盘子
    a: 表示第一个柱子
    b: 表示第二个柱子
    c: 表示第三个柱子  
    '''
    if n == 1:
	    print(a, '-->', c)
	    return None
	else:
		move(n-1,a,c,b)
		print(a, '-->', c)
		move(n-1,b,a,c)
move(4,'A','B','C')

代码执行结果如下:
A -> B
A -> C
B -> C
A -> B
C -> A
C -> B
A -> B
A -> C
B -> C
B -> A
C -> A
B -> C
A -> B
A -> C
B -> C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值