Java完美实现经典汉诺塔问题
发布日期:2021-05-08 21:34:21 浏览次数:17 分类:精选文章

本文共 941 字,大约阅读时间需要 3 分钟。

汉诺塔问题:递归解决思路与代码实现

问题背景

汉诺塔问题源自印度神话,描述了一个复杂的盘塔移动任务。传说中,有三根金色金刚柱,分别用A、B、C表示。A塔上叠放着从上到下依次变小的64个黄金圆盘,最上面是1号,最下面是64号。规则是:任何时候只能将一个圆盘放置在比它大的圆盘上。婆罗门被命令将64个圆盘全部从A塔移动到C塔,借助B塔完成任务。

解决思路

汉诺塔问题的递归解决方案基于以下逻辑:

  • 单盘情况:只需将A塔的1号盘直接移动到C塔。

  • 双盘情况:先将A塔的1号盘移动到B塔,再将A塔的2号盘移动到C塔,最后将B塔的1号盘移动到C塔。

  • 多盘情况:将A塔上1至n-1号盘借助B塔(即C塔)移动到B塔,然后将A塔的n号盘移动到C塔,最后将B塔上的n-1号盘借助A塔移动到C塔。这种递归模式适用于n>2的情况。

  • 这种递归思路类似于递归算法的逻辑,通过不断分解问题,最终解决最简单的情况。

    代码实现

    public static void moveDish(int n, char a, char b, char c) {    if (n == 1) {        System.out.println(a + "->" + c);    } else {        moveDish(n - 1, a, c, b); // 将a塔的前n-1个盘子借助c塔移动到b塔        System.out.println(a + "->" + c);        moveDish(n - 1, b, a, c); // 将b塔的n-1个盘子借助a塔移动到c塔    }}public static void main(String[] args) {    Scanner sc = new Scanner(System.in);    int num = sc.nextInt();    moveDish(num, 'A', 'B', 'C');    sc.close();}

    运行结果

    输入任意数值n,程序会输出相应的盘子移动序列。例如:

    输入:3

    输出:A->CA->BB->CA->CB->AB->CA->BB->C

    通过这种方式,可以清晰地观察到递归算法的执行过程。

    上一篇:寻找缺失数字
    下一篇:求两个数的最大公因数 求两个数的最小公倍数

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年04月27日 03时25分45秒