汉诺塔_计数_python

汉诺塔

'''
Author:kun
date:2021.02.21
假设存在hanoi这个函数,可以将n-1个盘子移动到从开始移动开始到中间柱子,此时只剩下最大的盘子可以从开始的柱子移动到目标柱子
移动了一次之后,剩下的n-1个柱子就在了中间柱子上,此时,目标柱子依然不变,而中间柱子和开始柱子的位置发生了变化
'''
import time
global num
num = 0
a=[None]*100
def hanoi(n,p1,p2,p3):#p1,p2,p3是三根柱子,n是待移动到p3的盘子数量。
    global num
    if n==1:
        # print("00P3:{},p2:{},P1:{}".format(p3, p2, p1))
        # print('盘子从{}移动到{}'.format(p1,p3))
        num=num+1
        # print(num)
        # return num
    elif a[n-1]:
        # return a[n-1]
        num=num+a[n-1]
    else:

        # print("01P3:{},p2:{},P1:{}".format(p3, p2, p1))
        hanoi(n-1,p1,p3,p2)#将盘子从木桩p1移动到p2
        # print('盘子从{}移动到{}'.format(p1, p3))#将最大的盘子移动到P3
        num = num+1
        # print(num)
        # print("02P3:{},p2:{},P1:{}".format(p3,p2,p1))
        hanoi(n-1,p2,p1,p3)
    a.append(num)
    return num
start_time=time.time()
n=int(input("输入要移动的盘子数量:"))
print(hanoi(n,'p1','p2','p3'))
end_time=time.time()
print("s_t:{},e_time:{},time_use:{}".format(start_time,end_time,end_time-start_time))

你可能感兴趣的:(蓝桥—python,python,算法)