日撸java_day27

今天写一个汉诺塔的代码,用老师的参数名,代码规范。。
记得高中数学学数列时候学到这个移动次数,数据结构栈那块递归举例就是用汉诺塔,用递归很容易实现,代码也比较简单,
 

package datastructures.tree;

/**
 * ClassName: Hanoi
 * Package: datastructures.tree
 * Description:
 *
 * @Author: luv_x_c
 * @Create: 2023/5/16 17:24
 */
public class Hanoi {
    /**
     * Move a number of plates.
     *
     * @param paraSource       The source pole.
     * @param paraIntermediary The intermediary pole.
     * @param paraDestination  The destination pole.
     * @param paraNumber       The number of the plates.
     */
    public static void hanoi(char paraSource, char paraIntermediary, char paraDestination, int paraNumber) {
        if (paraNumber == 1) {
            System.out.println(paraSource + "->" + paraDestination + " ");
            return;
        }//Of if

        hanoi(paraSource, paraDestination, paraIntermediary, paraNumber - 1);
        System.out.println(paraSource + "->" + paraDestination + " ");
        hanoi(paraIntermediary, paraSource, paraDestination, paraNumber - 1);
    }// Of hanoi

    /**
     * The entrance of the program.
     *
     * @param args Not used now.
     */
    public static void main(String[] args) {
        hanoi('a', 'b', 'c', 4);
    }//  Of main

}// Of class Hanoi

 大概就是,假如有三个盘子,先把上面俩移动到中转的pole,也就是intermediary,然后把最下面的移动到目的pole,然后接下来就剩下俩盘子,以此类推,这俩盘子,先把上面的移动到中转杆,也就是一开始的sourcepole,然后第二个就可以到destination,剩下一个盘子,直接就可以移动。

 移动次数应该是2^k-1,k是几个盘子(?没记错的话),代码确实和递归遍历二×树有点像

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值