首页 > 其他 > 详细

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

时间:2020-01-04 18:00:36      阅读:101      评论:0      收藏:0      [点我收藏+]

一、问题描述:

  从左到右有 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作为辅助柱子
    }

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

原文:https://www.cnblogs.com/han200113/p/12149570.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!