前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >汉诺塔递归算法流程图_汉诺塔算法递归表达式

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

作者头像
全栈程序员站长
发布2022-11-01 17:02:27
7220
发布2022-11-01 17:02:27
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

汉诺塔(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、汉诺塔 — 实现

代码语言:javascript
复制
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
  • T(n) = 2 ∗ T(n) − 1 + O(1) 因此时间复杂度是:O(2n)
  • 空间复杂度:O(n)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 汉诺塔(Hanoi)
    • 1、汉诺塔 — 1个盘子
      • 2、汉诺塔 — 2个盘子
        • 3、汉诺塔 — 3个盘子
          • 3、汉诺塔 — 思路
            • 4、汉诺塔 — 实现
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档