到处查资料看视频终于理解了一点和大家一起分享一下:
贴代码:
if n == 1:
print(a, '-->', c)
else:
move(n-1,a,c,b)
move(n-1,b,a,c)
①问题的关键在于理解**“递归”**的思想
②就汉诺塔这个问题,之所以也是一个递归的问题在于:
要想把n个堆叠好的圆盘从a移动到c,需要做的事情有
(问题来了,怎么把n-1个从a移动到b?可以先把n-2个从a移动到c,再把唯一的那个从a移动到b,最后把n-2个从c移动到b。一直到最后,就能变成移动一个圆盘的问题,这样递归的逻辑也就形成了)
再把剩下的那个最大的从a移动到c(所有的print都是打印的移动这个最大的圆盘,所有的圆盘经过递归,都会在某一步中是最大圆盘,并且这个移动被print出来就能作为输出记录所有的操作)
最后把b上的n-1个从b移动到c(和前面类似)
罗里吧嗦的,欢迎大家一起探讨
豁然开朗
谢谢!
多谢!很棒的讲解
Sign in to make a reply
talyerbooming
到处查资料看视频终于理解了一点和大家一起分享一下:
贴代码:
if n == 1:
print(a, '-->', c)
else:
move(n-1,a,c,b)
print(a, '-->', c)
move(n-1,b,a,c)
①问题的关键在于理解**“递归”**的思想
②就汉诺塔这个问题,之所以也是一个递归的问题在于:
要想把n个堆叠好的圆盘从a移动到c,需要做的事情有
(问题来了,怎么把n-1个从a移动到b?可以先把n-2个从a移动到c,再把唯一的那个从a移动到b,最后把n-2个从c移动到b。一直到最后,就能变成移动一个圆盘的问题,这样递归的逻辑也就形成了)
再把剩下的那个最大的从a移动到c(所有的print都是打印的移动这个最大的圆盘,所有的圆盘经过递归,都会在某一步中是最大圆盘,并且这个移动被print出来就能作为输出记录所有的操作)
最后把b上的n-1个从b移动到c(和前面类似)
罗里吧嗦的,欢迎大家一起探讨