汉诺塔问题
使用函数递归计算,定义函数hanoi的参数
n:圆盘的个数
src:起始柱子
mid:中转柱子
dst:目标柱子
算法理解的关键在于,找到递归的基例和链条。
基例:只有一个圆盘的情况下,直接从src拿到dst。
if n==1:
print("{}:{}->{}".format(n,src,dst))
链条:其他情况下,可以假设其他n-1个圆盘为一个整体,从src拿到mid
hanoi(n-1,src,dst,mid)
剩下的第n个圆盘可以直接从src拿到dst,
print("{}:{}->{}".format(n,src,dst))
然后再将n-1个圆盘从mid柱子拿到dst柱子。
hanoi(n-1,mid,src,dst)
n=eval(input("please in put n:"))
count=0
def hanoi(n,src,mid,dst):
global count
if n==1:
print("{}:{}->{}".format(n,src,dst))
count+=1
else:
hanoi(n-1,src,dst,mid)
print("{}:{}->{}".format(n,src,dst))
count+=1
hanoi(n-1,mid,src,dst)
hanoi(n,"A","B","C")
print(count)