小样的第十一次学习博客——Python之递归(汉诺塔)
简述:(转载自其他博主)
存在三根相同并排的柱子(起始柱,目标柱,辅助柱),第一根柱子上面有从小到大依次排列的n个盘子,大盘子在下面,小盘子在上面,现在需要将这n个盘子从起始柱移动到目标柱上。
移动的规则是:①每次只能移动一个盘子,而且只能移动柱子上最顶部的圆盘;②大盘子不能放在小盘子上面。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/i129percent/article/details/132638750
原理,转载的这篇博客讲的很清楚
但我想做一些补充
先上代码
# 递归 汉诺塔
step=0
def hanoi(count,start,target,auxiliary):
global step
if count==1:
step+=1
print("第{}次:{}->{}".format(step,start,target)) #只有1个圆盘,直接从起始柱移动到目标柱
else:
hanoi(count-1,start,auxiliary,target) #把count-1个圆盘从起始柱移动到辅助柱
step+=1
print("第{}次:{}->{}".format(step,start,target)) #把第count个圆盘从起始柱移动到目标柱
hanoi(count-1,auxiliary,target,start) #把辅助柱上的count-1个圆盘移动到目标柱上
hanoi(4,'a','c','b')
首先我们一定要搞清楚这个函数首部,
即 hanoi(count, start, target, auxiliary)
,我们先把这个函数首部换成 hanoi(count,a,b,c)
这个函数的作用是把a柱上的count个圆盘移动到b柱,不涉及c柱
那么刚刚这个函数
hanoi(count, start, target, auxiliary)
的作用就是把起始柱上的count个圆盘移动到目标柱,不涉及辅助柱
hanoi(count, start, auxiliary, target)
的作用就是把起始柱上的count个圆盘移动到辅助柱,不涉及目标柱
hanoi(count, auxiliary, target, start)
的作用就是把辅助柱上的count个圆盘移动到目标柱,不涉及起始柱
还有
每一次print
也代表一次移动
这下大家应该能看懂代码中的注释了