当前位置: 首页 > news >正文

算法题(165):汉诺塔问题

审题:
本题需要我们找到最优的汉诺塔搬法然后将移动路径输出

思路:
方法一:递归

我们先分析题目

n为2的情况,我们先将第一个盘子移动到三号柱子上,然后再将二号盘子移动到二号柱子上

n为3的情况,我们先将前面两个盘子移动到三号柱子上,然后再将三号盘子移动到二号柱子上

所以大问题就可以分解为同样的子问题,都是将x柱子上的盘子通过y柱子移动到z柱子上

图示:

第一步:将前面n-1个盘子通过z柱子移动到y柱子上

第二步:将x柱子上的最后一个盘子借助y柱子移动到z柱子上

第三步:将y柱子上的n-1个盘子借助x柱子移动到z柱子上

解题:
 

#include<iostream>
using namespace std;
int n;
char a, b, c;
//x上的n个盘子借助y柱子移动到z柱子上
void func(int n, char x, char y, char z)
{//退出条件if (n == 0){return;}func(n - 1, x, z, y);printf("%c->%d->%c\n", x, n, z);func(n - 1, y, x, z);
}
int main()
{cin >> n >> a >> b >> c;func(n, a, c, b);return 0;
}

递归就是大问题的解决要依靠一模一样的小问题,此时我们就可以通过自己调用自己函数的方式来解决此类问题。

写出递归的方法:

1.给递归函数指定一个功能,并在递归函数调用自身的时候默认他可以实现指定的功能

2.只关注解决一个问题,而不要直接将递归展开思考

3.写出返回条件

信息学奥赛一本通(C++版)在线评测系统

相关文章:

  • 华为OD机考-机房布局
  • 合成数据:国内外创新企业的崛起与突破
  • UE的AI行为树Selector和Sequence如何理解
  • day6 cpp:c中处理字符串,c++string
  • CSP信奥赛C++常用系统函数汇总
  • Linux 下 DMA 内存映射浅析
  • Effective Java 第三版 第二三章总结
  • 【JVM】Java虚拟机(三)——类加载与类加载器
  • [创业之路-410]:经济学 - 国富论的核心思想和观点,以及对创业者的启发
  • Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
  • 2025-06-02-IP 地址规划及案例分析
  • OD 算法题 B卷【反转每对括号间的子串】
  • Secs/Gem第八讲(基于secs4net项目的ChatGpt介绍)
  • 剑指offer19_链表中倒数第k个节点
  • Netty集群搭建
  • python打卡day48
  • PandasAI使用
  • 深入解析 Pandas 核心数据结构:Series 与 DataFrame
  • 重读《人件》Peopleware -(15)Ⅱ 办公环境 Ⅷ 撑伞之步:构建理想办公环境(下)
  • 【C++系列】智能指针自定义析构
  • 快速做网站用什么软件/bilibili官网网页入口
  • 黄州做网站的/2021十大网络舆情案例
  • 网络托管/谷歌seo排名
  • 网站建设发布ps科技感/网络推广公司官网
  • 大型企业网站开发/aso优化软件
  • 真人真做网站/广东全网推广