Discuss / Python / 其实关键在于理解递归

其实关键在于理解递归

Topic source

talyerbooming

#1 Created at ... [Delete] [Delete and Lock User]

到处查资料看视频终于理解了一点和大家一起分享一下:

贴代码:

    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-1个从a移动到b?可以先把n-2个从a移动到c,再把唯一的那个从a移动到b,最后把n-2个从c移动到b。一直到最后,就能变成移动一个圆盘的问题,这样递归的逻辑也就形成了)

  • 再把剩下的那个最大的从a移动到c(所有的print都是打印的移动这个最大的圆盘,所有的圆盘经过递归,都会在某一步中是最大圆盘,并且这个移动被print出来就能作为输出记录所有的操作

  • 最后把b上的n-1个从b移动到c(和前面类似)

罗里吧嗦的,欢迎大家一起探讨

greatmaskino

#2 Created at ... [Delete] [Delete and Lock User]

豁然开朗

谢谢!

涵_天

#4 Created at ... [Delete] [Delete and Lock User]

多谢!很棒的讲解


  • 1

Reply