递归解决汉诺塔问题

末鹿安然 提交于 2019-11-27 16:03:05

问题描述

哈哈哈哈哈哈,自己去4399玩汉诺塔游戏

代码实现

package com.wuxudong.recursion;

//汉诺塔问题
public class Hanoi {

    public static void main(String[] args) {
        hanoi(5,'A','B','C');
    }

    /**
     *
     * @param n 盘子的个数
     * @param from 开始的柱子
     * @param in 中间的柱子
     * @param to 目标柱子
     */
    public static void hanoi(int n, char from,char in, char to){
        //只有两个情况,只有一个盘子和其它大于一个盘子的情况

        //只有一个盘子
        if(n==1){
            System.out.println("第1个盘子从"+from+"移动到"+to);
        }else {
            //无论有多少个盘子都看成两个盘子,上面所有n-1个盘子和下面的一个盘子
            //将上面的盘子移动到中间位置
            hanoi(n-1,from,to,in);
            //将第n个盘子移动到目标柱子
            System.out.println("第"+n+"个盘子从"+from+"移动到"+to);
            //将中间柱子的盘子移动到目标柱子
            hanoi(n-1,in,from,to);
        }
    }

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!