递归算法——汉诺塔问题的代码(java实现)

242 阅读1分钟

递归算法

汉诺塔

汉诺塔实现代码.

// An highlighted block
 /**
     *
     * @param num 盘子的数量
     * @param from 开始移动的柱子
     * @param in    中间转换用的柱子
     * @param to    所有盘子要去的柱子
     *              无论盘子有多少,都认为有两个盘子,即n个盘子可视为上面n-1个盘子和最下面一个盘子
     */
    public static void hanoi(int num,char from,char in,char to){
        if (num == 1){
            //盘子数量为1,直接输出
            System.out.println("第1号盘子从" + from+"号柱子移动到"+to+"号柱子");
        }else{
            //盘子数量不为1则继续调用hanoi()方法
            //此时挪动上面的n-1个盘子,将n这n-1个盘子挪到中间柱,而对于这n-1个盘子来说,要去的地方就是中间的柱子,所以此时的to在in的位置
            //挪完后,最下面的那个盘子自然就挪到了第三个柱子上
            hanoi(num-1,from,to,in);
            System.out.println("第"+num+"号盘子从" + from+"号柱子移动到"+to+"号柱子");
            //现在开始继续将中间的n-1个盘子重复,上面的操作
            //此时,这些盘子,又分为上面n-1个和最下面的一个
            //对于上面的n-1个而言,此时的开始位置是in,要去的位置是to,中间的位置是from
            hanoi(num-1,in,from,to);
        }
    }

结语

这是来自一个java小白的代码实现,还请各位大佬之指正