汉诺塔问题如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面
解决问题的方法:
解决汉诺塔问题需要用到递归的方法,而递归需要有一个整体思维以及逆向思维,就比如解决这个汉诺塔问题,假设圆盘有5个,我们不用先考虑第1个怎么移动,第2个怎么移动,我们可以先考虑第5个怎么移动,我们不用非要考虑前4个盘子怎么先一个个移到C柱,可以先把上面4个盘子当一个整体,先移动上面4个盘子的整体到B柱,然后移动第5个盘子到C柱,再将4个盘子的整体从B柱移动到C柱,如此就完成了一次移动,同理,当移动上面4个盘子的时候可以将上面3个盘子当一个整体,先移动上面3个盘子的整体到B柱,再移动第4个盘子到C柱,再将3个盘子的整体移动到C柱。同理反复,移动就完成了。
下面就是代码的实现:(假设有5个盘子)
//首先第一步,我们先传入4个参数,盘子个数num,A,B,C三个柱子a,b,c
// 这里有个很关键的问题,也是汉诺塔代码我初学的时候看不懂的原因。当我们写代码的时候,那3根柱子不要当成固定的,而是可以移动的,字母只是代称,代码中的abc并不是就单