汉诺塔函数python_帮你轻松理解《汉诺塔》函数

Python实现汉诺塔的函数:

def hanoi(n,A,B,C):

if n == 1:

print(A,'-->',C)

else:

hanoi(n-1,A,C,B)

hanoi(1,A,B,C)

hanoi(n-1,B,A,C)

hanoi(3,'A柱子','B柱子','C柱子')

默认情况下:

n是盘子数,A是起始柱,B是中转柱,C是目标柱

要把A柱上的盘按照汉诺塔规则全部移到C柱上

除了1个盘比较特殊外,大于1个盘基本上可以拆分为三步:

首先是要把C柱空出来放最大的,这就需要利用C柱做中转柱,把A柱上除最大的那个盘之外,其它的n-1个盘,利用C柱做为中转,全部从A柱移到B柱上

这种情况下,A是起始柱,C是中转柱,B是目标柱

move(n-1,A,C,B)

然后再把A柱上最大的那个盘移到C柱,这样这个最大的盘就在C柱最下面了(这个只有一步)

这种情况下,A是起始柱,B是中转柱,C是目标柱

move(1,A,B,C)

然后再把B柱上的n-1个盘通过A柱全部移动C柱上。

这种情况下,B柱是起始柱,A是中转柱,C是目标柱

move(n-1,B,A,C)

这样去理解的话,这个函数就很容易写出来了。

其实这个难的不是理解这个函数,而是不知道这个函数前,你能不能通过归纳写出这个函数。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值