汉诺塔小例子

闲来无事,做个汉诺塔试试机器性能

警告:请谨慎设置盘子的数目,机器性能不好的非常容易卡死

    public static void main(String... args) {
        Instant start = Instant.now();
        moveTower(3, 'A', 'B', 'C');
        Instant end = Instant.now();
        Duration time = Duration.between(start, end);
        long seconds = time.getSeconds();//秒表示
        long millis = time.toMillis();//毫秒表示
        System.out.println(seconds);
        System.out.println(millis);
    }

    /**
     * N个盘子从A经过B移动到C
     * 标记盘子从小到大 1——>n号
     *
     * @param n 盘子的数目
     * @param A 源座
     * @param B 辅助座
     * @param C 目的座
     */
    public static void moveTower(int n, char A, char B, char C) {
        //如果只有1个盘子,直接从A移动到C
        if (n == 1) {
            System.out.println("盘1从" + A + "移动到" + C);
        } else {
            //否则上面n-1个盘子通过C移动到B柱子上
            moveTower(n - 1, A, C, B);
            //然后把第n个盘子直接从A移到C柱上
            System.out.println("盘" + n + "从" + A + "移动到" + C);
            //再把其余移到B上的盘子通过A移动到C上,就完成了
            moveTower(n - 1, B, A, C);
            //通过递归,传入的n会逐渐减少,ABC对应的位置也会不断变化,最终化解为移动一个盘子
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 重温汉诺塔: n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。由于发生错移产生的...
    碧影江白阅读 1,617评论 2 3
  • 作者:陈文学 对于大庆人,这是一条神圣而充满深情的大道,大庆人赋予它的名字都饱含着崇敬、珍视和憧憬——世纪大道。 ...
    呼和乌拉阅读 982评论 0 0
  • A.打卡第一天,雏鹰计划d阶段参加了4D领导力课程。 M.很久很久没有全身心的投入到学习中,接触了这堂课莫名觉得很...
    Firework_c5a2阅读 129评论 0 2
  • 如果说比不说更痛苦,我宁愿独自扛过,也选择保持沉默。 我承认自己是一个外强中干的女孩,外表看起来乐观坚强,其实我特...
    静心听风阅读 377评论 1 1
  • 已经毕业三年了 但是仍然无法忘记那个那个充满回忆的宿舍 记忆最深的是我的下铺哥们儿,人送外号“钢鞭” 至于原因吗,...
    醉梦情书渔舟阅读 237评论 0 1

友情链接更多精彩内容