count=0
def hanoi(n,src, dst, mid):
    global count
    if n == 1:
        print(f"{1}:{src}->{dst}")
        count+=1
    else:
        hanoi(n-1,src,mid,dst)       #第一步:n-1阶从A→B
        print(f"{n}:{src}->{dst}")   #第二步:第n个从A→C
        count+=1
        hanoi(n-1,mid,dst,src)       # 第三步:n-1阶从B→C
    

def main():
    n = eval(input("请输入阶数:"))
    hanoi(n, "A","C","B")
    print(count)
    
main()

# 原理:
# 汉诺塔是典型的函数递归应用的案例,不能简单的用2阶汉诺塔、3阶汉诺塔推理至n阶汉诺塔的方式去理解,必须站在n和n-1的关系去理解。
# 有三个柱子A、B、C,有n阶汉诺塔,从递归的角度考虑,把汉诺塔分为第n个和n-1阶
# 第一步:n-1阶从A→B
# 第二步:第n个从A→C
# 第三步:n-1阶从B→C 
# 
# 自己感悟
# 汉诺塔虽然理解上有些难,但只要多给点时间,还是能够想通的。