Zou-Wang
小寒
吾生也有涯,而知也无涯
欢迎来到Zou-Wang的博客

汉诺塔问题--递归解决方案

一、问题描述:

  从左到右有 A、B、C 三根柱子,其中 A 柱子上面有从小叠到大的 n 个圆盘,现要求将 A 柱子上的圆盘移到 C 柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数 

  

 

二、思路

                                                                        

 

 

假设现在A柱子上只有一个盘子
                    1号盘子-->C
假设现在A柱子上有两个盘子
                    1号盘子-->B(辅助作用),
                    2号盘子-->C
                    1号盘子-->C
假设现在A柱子上有三个盘子,把最上面的两个盘子看成一整体,最下面一个看成一个整体
                    上整体全部盘子-->B,
                     最下面盘子-->C,
现在B上面的盘子是两个,和A柱子上两个盘子时状况相同,现在把A柱子(现在是空的)当作辅助柱子,重复上面操作
。。。。。类推

三、代码实现

  

public static void HanNuo(int N,String A,String B,String C){
        if (N==1){
            System.out.println(N+"from"+A+"-->"+C);
            return;
        }
        HanNuo(N-1,A,C,B);//把n-1看成整体,n-1挪动到辅助柱子B上
        System.out.println(N+"from"+A+"-->"+C);//N从A挪动到C
        HanNuo(N-1,B,A,C);//把n-1个盘子的B看成A,A作为辅助柱子
    }
posted @ 2020-01-04 16:41  看远看近  阅读(413)  评论(0编辑  收藏  举报
Live2D
div class="Snow">