汉诺塔问题就是有且只有三个可以放置圆环的地方,所有圆环按照从小到大依次从上向下排列在第一个柱子上,求经过什么操作将顺序不变的将圆环整体从第一个移动第三个柱子上
def hanoi(n,a,b,c):
if n>0:
hanoi(n-1,a,c,b) #1
print("moving from %s to %s" %(a,c)) #2
hanoi(n-1,b,a,c) #3
hanoi(1,'A','B','C')
首先讲解只有一个圆环时,则调用hanoi(1,'A','B','C'),首先判断if条件,n>0,则调用hanoi(0,'A','C','B'),n=0,返回空,即什么都不返回,然后执行print语句,输出:moving from A to C
可能会有人疑惑为啥不是A to B,因为最外层是n=1,#1语句调用了n=0,为空,#2调用的a和c就是最外层的a,c,等下循环两次时,里面的参数会改变,因为这里是形式参数
然后调用的#3也是n=0,返回空
#输出 :moving from A to C
def hanoi(n,a,b,c):
if n>0:
hanoi(n-1,a,c,b)#1
print("moving from %s to %s" %(a,c))#2
hanoi(n-1,b,a,c)#3
hanoi(2,'A','B','C')
然后n=2时,运行到#1时,调用n=1,继续调用n=0,返回空,回到#2语句,输出:
#moving from A to B
因为调用#1时候,最外层函数将b赋给了c,所以在以n=2的函数中的#1循环结束,然后执行#2,输出
#moving from A to C
这里调用的时n=2时的后面三个参数,最后执行#3,和#1一样,执行两层,n=0时返回空,n=1时输出
#moving from B to C
后面的n等于3,4等等和上面方法类似,大家学习代码一定能要有思考推到能力,知道逻辑一定要自己去推导后面的,不懂得可以在评论区讨论
标签:输出,调用,python,hanoi,算法,汉诺塔,print,moving,圆环 From: https://blog.csdn.net/2301_78050920/article/details/143471797