java三个柱子汉诺塔问题

Posted DQ_CODING

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java三个柱子汉诺塔问题相关的知识,希望对你有一定的参考价值。

题目

移动盘子,每一次只能移动一个,小盘子在大盘子上。

打印1 from A to B过程

注意

1)盘子编号的变化和辅助柱子的变化

2)当盘子编号为1时,结束递归,此时移动结束

代码

package p2;

/**
 * Illustration
 *
 * @author DengQing
 * @version 1.0
 * @datetime 2022/5/7 16:01
 * @function 汉诺塔问题:把盘子从A移动到B【A B C】
 * 移动盘子,每一次只能移动一个,小盘子在大盘子上。
 * 打印1 from A to B过程
 */
public class problem8 
    public static void main(String[] args) 
        move(3, "A", "B", "C");
    

    /**
     * n:初始的n个盘子,n为最大编号
     * from:原始柱子
     * to:目标柱子
     * help:辅助柱子
     */
    public static void move(int n, String from, String to, String help) 
        //当移动1号盘子时,递归结束
        if (n == 1) 
            System.out.println("盘子" + n + "从" + from + "移动到" + to);
            return;
        
        /*盘子1从A移动到B
        盘子2从A移动到C
        盘子1从B移动到C
        盘子3从A移动到B
        盘子1从C移动到A
        盘子2从C移动到B
        盘子1从A移动到B*/
        //先把1~n-1个盘子移动到辅助空间上
        move(n - 1, from, help, to);
        //n号盘子可以到达目标柱子
        System.out.println("盘子" + n + "从" + from + "移动到" + to);
        //再把1~n-1个盘子从辅助空间移动到目标柱子上去
        move(n - 1, help, to, from);

    

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于java三个柱子汉诺塔问题的主要内容,如果未能解决你的问题,请参考以下文章

汉诺塔问题详解

汉诺塔递归思维

汉诺塔问题

汉诺塔

面试题 08.06. 汉诺塔问题(非递归实现汉诺塔问题)

2.6 递归与分治策略(汉诺塔问题)