看不懂这个汉诺塔算法代码的运行逻辑

h373115691 2023-12-25 15:42:07

看不懂这个代码的运行逻辑:汉诺塔算法

public class TowersTest {
    public static void main(String[] args) {
        int nDisks = 3;
        doTowers(nDisks, 'A', 'B', 'C');
    }
    public static void doTowers(int topN, char from, char inter, char to) {
        if (topN == 1){
            System.out.println("Disk 1 from "
            + from + " to " + to);
        }else {
            System.out.println("one:"+topN);
            doTowers(topN - 1, from, to, inter);
            System.out.println("two:"+topN);
            System.out.println("Disk "
            + topN + " from " + from + " to " + to);
            System.out.println("three:"+topN);
            doTowers(topN - 1, inter, from, to);
        }
    }
}

运行结果:没看懂运行顺序是怎么来的

E:\java\lianxi>java TowersTest
one:3
one:2
Disk 1 from A to C
two:2
Disk 2 from A to B
three:2
Disk 1 from C to B
two:3
Disk 3 from A to C
three:3
one:2
Disk 1 from B to A
two:2
Disk 2 from B to C
three:2
Disk 1 from A to C

...全文
665 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
T0BSky 2024-05-22
  • 打赏
  • 举报
回复

这段代码实现了经典的汉诺塔算法,用于将一堆盘子从柱子 A 移动到柱子 C,其中 B 为辅助柱子。让我们逐步解释一下代码的运行逻辑:

  1. main 方法中,nDisks 被设为 3,即有 3 个盘子需要移动。然后调用 doTowers 方法开始执行汉诺塔算法。

  2. doTowers 方法接收四个参数:topN 表示当前需要移动的盘子数量,from 表示起始柱子,inter 表示辅助柱子,to 表示目标柱子。

  3. topN 等于 1 时,表示只有一个盘子需要移动,直接将盘子从起始柱子移动到目标柱子,并打印移动的步骤。

  4. topN 大于 1 时,先将 topN-1 个盘子从起始柱子通过目标柱子移动到辅助柱子,然后将剩下的一个盘子从起始柱子移动到目标柱子,最后将之前移动到辅助柱子的 topN-1 个盘子通过起始柱子移动到目标柱子。

  5. 递归调用的过程中,通过交换 frominterto 的位置,实现了盘子的移动顺序。每次递归都会打印出移动的步骤,最终完成整个汉诺塔的移动过程。

这段代码的输出结果显示了每一步的移动情况,可以看到整个移动过程符合汉诺塔算法的规则。如果你有具体的疑问或需要进一步解释,请随时提出!

h373115691 2023-12-26
  • 打赏
  • 举报
回复

嗯,已经看懂了,这玩意是按顺序一直执行下去的。。。

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧