汉诺塔问题

汉诺塔刚开始一直没想清楚,单步调试代码也晕乎乎的,其实,首先要搞清楚它的递归的思想,主要是把盘子从A移动到C,B做为过渡,所有的盘子都不能压在比它小的盘子上,这里要记住一件事,最大的盘子上面是可以放置任意一个盘子的,当n-1个盘子借助C,移动到了B上后,底下最大的那个盘子直接移动到C,此时,可以忽略C上的这个最大的盘子,因为它是最大的,无论上面放什么盘子都不会影响,此时问题就变成了如何将n-2个盘子借助C,从B移到A上,然后把B底下最大的那个盘子移动到C上,接下来n-2个盘子又回到了A上,又回到了之前的步骤,将盘子,借助C,n-3个盘子移到B上,最底下的盘子移到C上。将一个问题分解成相同的子问题,不停地调用自身。

1:将a柱子上n-1个盘子借助c柱子,移动到b柱子上去

2:再直接将a柱子上的最后一个盘子移动到c

3:然后将b柱子上的n-1个盘子借助a移动到c

其实主要步骤还是第一步,如何将n-1个盘子移动到B上,起初设置的是c为中介,即顺序是a,c,b;经过一次循环后,a=a.b=c,c=b,这里交换了顺序 如果此时n!=1的话,继续交换,a=a,b=b,c=c,又换回来了,直至n=1,然后再弹栈,一步步回到之前的调用函数。

原文地址:https://www.cnblogs.com/ymd12103410/p/10023362.html