汉诺塔问题与递归调用(JAVA语言)

汉诺塔问题(JAVA)与递归的理解

直接上代码

package com.xiaokai.test;

/**
 * @Description 汉诺塔的递归实现测试
 * @Author xiaokai
 * @date 2022/3/15 5:17
 */
public class HanoiTest {
    //静态全局变量,统计递归的次数
    public static int count;
    /**
     * @Des main()方法入口
     * @Author xiaokai
     * @Date 2022/3/15 20:03
     * @Param [args]
     * @Return void
     */
    public static void main(String[] args) {
        int topN = 3;
        HanoiTest hanoiTest = new HanoiTest();
        hanoiTest.doTowers(topN, 'A', 'B', 'C');
        System.out.println(count);
    }
    /**
     * @Des 汉诺塔的解法递归调用
     * @Author xiaokai
     * @Date 2022/3/15 19:52
     * @Param [topN, from, inter, to] topN:有几个碟子需要移动;  from:起始位置  inter:中间位置  to:目标位置
     * @Return void 没有返回
     */
    public void doTowers(int topN, char from, char inter, char to) {
        count++;
        //递归结束的控制条件,即只有一个碟子的时候,直接A-->C
        if (topN == 1){
            System.out.println("Disk 1 从 "+from+" 移动到 "+to);
        }else {
            //topN-1递归,将除了最底下的 Disk(topN) 之外的(topN)个碟子看做一个整体,
            //首先将topN-1个移动到中间位置,需要交换to和inter的位置:A-->B,使用递归
            doTowers(topN-1,from,to,inter);
            //然后将Disk(topN)碟子从起始位置移动到目标位置:A-->C,只移动一个碟子,不用递归,直接输出
            System.out.println("Disk "+topN+" 从 "+from +" 移动到 "+to);
            //下一步将之前作为整体的(topN-1)个碟子从中间位置移动到目标位置上:B-->C,使用递归,需要交换起始位置和中间位置
            doTowers(topN-1,inter,from,to);
        }
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值