汉诺塔递归算法

来源:互联网 发布:mac pro玩游戏怎么样 编辑:程序博客网 时间:2024/05/22 13:31

大学的时候专业课程很差,指导大二学习算法设计的时候,发现专业课里比较有趣的一门。专心学习了一学期

最近在学习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);

这样就完成了木块的递归移动

原创粉丝点击