汉诺塔实现思想

本文详细介绍了汉诺塔问题的解决思路与递归算法实现,通过实例演示了不同数量盘子的移动步骤,并提供了Python代码实现,帮助读者理解递归调用与问题分解。

汉诺塔的原理展示

A,B,C三个柱子,盘子在A柱子上按金字塔形状从小到大排列
每次只能移动一个盘子
任何一次移动,必须大盘子在下面,小盘子在上面
最后盘子按顺序从放到C上
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190809165914230.gif)
1. 只有一个盘子1
    - 把1从A直接挪到C  (A --> C)
2. 俩个盘子1,2
    - 把1从A挪到B    (A --> B)
    - 把2挪到C       (A --> C)
    - 把1从B挪到C    (B --> C)
3. 三个盘子1,2,3
    - 把上面两个借助C先移到B   (2, A-->C-->B):  这里可以不看最底下个盘子,先看上面的两个盘子,借助C先移到B,这里跟两个盘子的移动是一样的。
	- 把1 移到C  (A --> C)
        - 把2 移到B (A --> B)
	- 把1 移到B (C --> B)
    - 把最底下的盘子3移到C               
	- A --> C 
    - 把 1,2 从B借助A移到C  (1,2 在B柱)(2, B-->A-->C)
        - 把 1 移到A
        - 把 2 移到C
        - 把 1 移到C
4. N个盘子 
     - 把上面N-1个先移到B柱 (N-1,A-->C-->B)
     - 把底下第N个移到C柱    (1,A-->C)
     - 把N-1个盘借助A移到C   (N-1, B-->A-->C)
--------------------- 

python实现

# 汉诺塔的实现方式
# n: 代表多少个盘子
# A, B, C 代表 起始盘子A,辅助盘子B,目的盘子C

#表示移动位置,从a到b
def move(a,b):
    print(a,"-->",b)
    
# 汉诺塔实现
def hanoi(n, A, B, C):
    if n == 1:
        move(A,C)
        return None
    if n == 2:
        move(A,B)
        move(A,C)
        move(B,C)
        return None
    if n >= 3:
        hanoi(n-1,A, C, B)    #上面的N-1个盘子从A上,借助C,移到B
        move(A,C)             # 把左边最底下的盘子从A移到C
        hanoi(n-1, B, A, C)   # 在B上个N-1个盘子,借助B移到C
        
# 测试
print("1个盘子")
hanoi(1,"A", "B", "C")
print("2个盘子")
hanoi(2,"A", "B", "C")
print("3个盘子")
hanoi(3,"A", "B", "C")        
print("5个盘子 ")
hanoi(5,"A", "B", "C")
--------------------- 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值