大学的时候专业课程很差,指导大二学习算法设计的时候,发现专业课里比较有趣的一门。专心学习了一学期
最近在学习python发现了一个递归算法很迷茫,遂研究了一下。
简单来说明一下:首先汉诺塔的规则是1、每次移动一块 2、小木块只能放在大木块上 3、将所有木块从A柱子移动C柱子木块上
用几个变量和常量来表示 n表示一共有多少木块 A、B、C分别表示柱子
那么如果n=1木块 这个就是好说,移动的方式就是 A---->C
n=2 移动的方式就是 A---->B 、A---->C 、B---->C
n=3 移动的方式就是 A-->C A-->B C-->B A-->C B-->A B-->C A-->C
依次类推 我们可以简化为只有两块,那么移动只需要三步
第一步:把上面的n-1块木块 从来A---->B
第二步: 然后把最下面那块 从A---->C
第三步:最后把B上面的n-1块移动到C
A 0,B n-1,C 1;
那么接下来就是 就相当于把B当成A 位置的柱子,把n-1木块看成新的N块木块
重复以上步骤
抽象成方法就是
move(N、A、B、C);
调用时每次都是A---->C
第一步 move(N-1、A、C、B);
第二步 move(1、A、B、C);
第三步 move(N-1、B、A、C);
这样就完成了木块的递归移动