汉诺塔游戏中,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置n个盘子。游戏的目标:把A杆上的盘子全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
我们首先把A盘当作左边那个,记为lef;B盘当作中间那个,记为mid;C盘当作右边那个,记为rig。当n=1时,那么盘子直接从A到C。
count = 0
def hanoi(n,lef,rig,mid):
global count
if n == 1:
print("{}:{}->{}".format(1,lef,rig))
count +=1
hanoi(1,"A","C","B")
print(count)
即1:A->C,count=1
接下来我们利用函数递归和代码复用,计算当n=10的时候,把n=10降解为n=1,增加一下else部分
count = 0
def hanoi(n,lef,rig,mid):
global count
if n == 1:
print("{}:{}->{}".format(1,lef,rig))
count +=1
else:
hanoi(n-1,lef,mid,rig)
print("{}:{}->{}".format(n,lef,rig))
count += 1
hanoi(n-1,mid,rig,lef)
hanoi(10,"A","C","B")
print(count)
最终输出count为1023