汉诺塔递归算法流程图_汉诺塔算法递归表达式

汉诺塔递归算法流程图_汉诺塔算法递归表达式(5)练习3—汉诺塔(Hanoi)编程实现把A的n个盘子移动到C(盘子编号是[1,n])每次只能移动1个盘子大盘子只能放在小盘子下面1、汉诺塔—1个盘子2、汉诺塔—2个盘子3、汉诺塔—3个盘子3、汉诺塔—思路其实分2种情况讨论即可(1)当n==1时,直接将盘子从A移动到C(2)当n>1时,可以拆分成3大步骤①将n–1个盘子从A移动到B②将编号为n的盘子从A移动到C③将n–1个盘子从B移动到C

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

汉诺塔(Hanoi)

  • 编程实现把 A 的 n 个盘子移动到 C(盘子编号是 [1, n] )
    每次只能移动1个盘子
    大盘子只能放在小盘子下面
    在这里插入图片描述

1、汉诺塔 — 1个盘子

在这里插入图片描述

2、汉诺塔 — 2个盘子

在这里插入图片描述

3、汉诺塔 — 3个盘子

在这里插入图片描述
在这里插入图片描述

3、汉诺塔 — 思路

  • 其实分 2 种情况讨论即可
    (1)当 n == 1时,直接将盘子从 A 移动到C
    (2)当 n > 1时,可以拆分成3大步骤

    ①将 n– 1 个盘子从 A 移动到B
    在这里插入图片描述
    ② 将编号为 n 的盘子从 A 移动到C
    在这里插入图片描述
    ③将 n– 1 个盘子从 B 移动到C
    在这里插入图片描述
    ✓ 步骤①③ 明显是个递归调用

4、汉诺塔 — 实现

public class Hanoi { 
   
    public static void main(String[] args) { 
   
        new Hanoi().hanoi(3,"A","B","C");
    }

    /** * 将n个碟子从p1挪动到p3 * @param p2 中间的柱子 */
    void hanoi(int n,String p1,String p2,String p3){ 
   
        if (n == 1){ 
   
            move(n,p1,p3);
            return;
        }

        //将p3看作中间柱子,将n-1个碟子从p1移动到p2
        hanoi(n-1,p1,p3,p2);
        move(n,p1,p3);
        //将p1看作中间柱子,将n-1个碟子从p2移动到p3
        hanoi(n-1,p2,p1,p3);
    }

    /** * 将 no号盘子从 from 移动到 to * @param no 碟子 * @param from 开始移动的柱子 * @param to 移动到的柱子 */
    void move(int no, String from,String to){ 
   
        System.out.println("将"+no + "号盘子从" + from + "移动到"+to);
    }
}
运行结果:
将1号盘子从A移动到C
将2号盘子从A移动到B
将1号盘子从C移动到B
将3号盘子从A移动到C
将1号盘子从B移动到A
将2号盘子从B移动到C
将1号盘子从A移动到C

Jetbrains全家桶1年46,售后保障稳定

  • T(n) = 2 ∗ T(n) − 1 + O(1)
    因此时间复杂度是:O(2n)
  • 空间复杂度:O(n)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206734.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java环境变量配置与adb环境变量配置的关系_mac设置环境变量

    java环境变量配置与adb环境变量配置的关系_mac设置环境变量Java环境变量配置与adb环境变量配置java环境变量配置第一步:下载jdk文件下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html第二步:安装jdk1.打开jdk安装包,点击下一步开始安装。2.弹出安装路径,将目录更改至D盘,点击下一步。3.在D盘Java目录下新建jer文件夹,并将安装路径更改至此目录下4.安装…

    2022年10月29日
    0
  • STM32编程怎么入门,聊聊我的入门经历

    STM32编程怎么入门,聊聊我的入门经历我第一次接触STM32大概是在8,9年前。当时刚出来工作不久,在此之前主要用stc和nxp的单片机比较多。那个时候还没有固件库开发的概念,基本都是配置寄存器去使用单片机外设资源。虽然说用起来比较麻烦,但是执行的效率也相对高一点,习惯了也挺好用。新项目比较复杂一点,一个老工程师建议我用stm32的单片机做效率比较高。听大佬的话照做是一个小菜鸟的基本素养,所以我选了stm32。对于学习这块,我也比较舍得(当时月薪只有1.8K),毫不犹豫花了几百大洋购买了一套stm32开发板。学习一款

    2022年9月7日
    0
  • LaTeX详细教程+技巧总结[通俗易懂]

    LaTeX详细教程+技巧总结[通俗易懂]LaTeX技巧总结,包含LaTeX工具,LaTeX模板,LaTeX技巧,LaTeX基础,文章架构,字体、大小和颜色,链接,列表,图片,表格,数学公式,算法(伪代码),代码块,论文写作,等等。

    2022年5月16日
    54
  • 16G kingston U盘 解除写保护[通俗易懂]

    16G kingston U盘 解除写保护[通俗易懂]前些天买的16Gkingstonu盘忽然有了写保护,但是拆开u盘又没有看到有写保护开关。纠结加郁闷。然后一天后又忽然发生了电脑无法识别U盘,连盘符也读不出来了。里面好多资料全无,彻底让我伤心了,

    2022年9月10日
    0
  • Object转成JSONObject

    Object转成JSONObjectpublicvoidonNext(Objecto){LogUtil.i(“getFavorites”,”json=”+o.toString());//JSONObjectjson=JSON.parseObject(“{\”code\”:1001,\”timestamp\”:\”2018-11-0503:40:54\”}”);…

    2022年6月14日
    44
  • nginx 499 产生的原因

    nginx 499 产生的原因

    2022年2月11日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号