汉诺塔问题
使用函数递归计算,定义函数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)
本文详细解析了汉诺塔问题及其递归算法实现。通过定义函数hanoi,利用递归策略解决了汉诺塔问题,展示了如何将n个圆盘从一个柱子移动到另一个柱子的过程。关键在于递归的基例与链条,当只剩一个圆盘时直接移动,其余情况则分解为更小的问题。
1081

被折叠的 条评论
为什么被折叠?



