python--汉诺塔问题

  

-汉诺塔问题

  -规则:

    1、每次只能移动一个盘子

    2、任何一次移动,三个塔的状态必须是小盘子在上,大盘子在下

  -方法:

    1, n = 1 :直接把A上的盘子移动到C上,A->C

    2, n = 2:

      1.把小盘子从A放到B上,A->B

      2.把大盘子从A放到C上,A->C

      3.把小盘子从B放到C上,B->C

    3,n = 3 :

      1.把A上的两个盘子,通过C移动到B上去(同2),调用递归实现

      2.把A上剩下的一个最大移动到C上, A->C

      3.把B上两个盘子借助A挪到C上,调用递归

    4,n = n:

      1.把A上的n-1个盘子,借助于C移动到B上去,调用递归

      2.把A上的最大盘子,也是唯一一个,移动到C上,A->C

      3.把B上的n-1个盘子借助A移动到C上,调用递归

 #1 把n-1个环从A柱放在B柱子上: hano(n-1, a, c, b)
#2 把最大的环从A柱放在C柱子上: hano(1,a,b,c)或者print(a, "-->", c)
#3 把n-1个环再从B柱子上转移到C柱子上: hano(n-1,b,a,c)


1
def hano(n, a, b, c): 2 ''' 3 汉诺塔的递归实现 4 :param n: 代表几个盘子 5 :param a: 代表a塔,开始的塔 6 :param b: 代表b塔,中间过渡塔 7 :param c: 代表c塔,目标塔 8 :return: 9 ''' 10 if n == 1: 11 print(a, "-->", c) 12 return None 13 ''' 14 if n == 2: 15 print(a, "-->", b) 16 print(a, "-->", c) 17 print(b, "-->", c) 18 return None 19 ''' 20 #把n-1个盘子,从a塔借助于c塔,挪到b上去 21 hano(n-1, a, c, b) 22 print(a, "-->", c) 23 #把n-1个盘子,从b塔,借助于a塔挪到c塔上去 24 hano(n-1, b, a, c) 25 26 a = "A" 27 b = "B" 28 c = "C" 29 n = 3 30 hano(n, a, b, c)

 

运行结果:

A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C

 

 

 

 

 

 

 

 

 

 

 

 

 

  

转载于:https://www.cnblogs.com/Slxc/p/9705790.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值