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

递归典例---汉诺塔

https://ybt.ssoier.cn/problem_show.php?pid=1205

#include<bits/stdc++.h>
#define endl '\n'
#define pii pair<int,int>
   
using namespace std;
using ll = long long;

void move(int n,char a,char b,char c) // n 个盘子,通过 b,从 a 移动到 c
{
    if(n==1) // 只有一个的时候,从 a 直接移动到 c
    {
        cout<<a<<"->1->"<<c<<endl; 
        return ;
    }
    move(n-1,a,c,b); // 拆分子问题,将 n-1 个圆盘通过 c 从 a 移动到 b
    cout<<a<<"->"<<n<<"->"<<c<<endl; // 将第 n 个从 a 移动到 c
    move(n-1,b,a,c); // 将剩下的 n-1 个通过 a 从 b 移动到 c,进入下一阶段
    return ;
}

void solve()
{
    int n;
    char a,b,c;
    cin>>n>>a>>b>>c;
    move(n,a,c,b);
}

int main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int T; T=1;
    while(T--)
    solve();
    return 0;
}

总次数:回顾移动的过程,不难发现,对于 n n n 个圆盘,移动经过以下步骤:

  1. 将 n-1 个圆盘移动到从 a 移动到 b
  2. 将最下面的圆盘从 a 移动到 c
  3. 将 n-1 个圆盘从 b 移动到 c
    f ( n ) = 2 ∗ f ( n − 1 ) + 1 f(n)=2*f(n-1)+1 f(n)=2f(n1)+1,根据数列的相关知识, f ( n ) = 2 n − 1 f(n)=2^n-1 f(n)=2n1
http://www.dtcms.com/a/109695.html

相关文章:

  • java 并发编程-阻塞队列
  • 升级到oracle 19.8后vm_concat函数不可用怎么解决
  • 网络空间安全(51)邮件函数漏洞
  • DeepSeek技术原理解读:从算法革新到产业变革
  • 【大模型基础_毛玉仁】6.4 生成增强
  • 【Spring AOP】@Aspect、 @Pointcut使用@annotation + 五种通知Advice注解
  • AI爬虫?爬!
  • Python入门(7):模块
  • 事件处理程序
  • 主题(topic)中使用键(key)来区分同一主题下的多个数据实例
  • 风云可测:华为AI天气大模型将暴雨预测误差缩至3公里内
  • ctfshow VIP题目限免 前台JS绕过
  • Oracle中的UNION原理
  • 【7】数据结构的队列篇章
  • 在Vue中如何高效管理组件状态
  • Swift 继承
  • Java 大数据在智能安防入侵检测系统中的多源数据融合与分析技术(171)
  • FreeRtos简介
  • LLM架构解析:词嵌入模型 Word Embeddings(第二部分)—— 从基础原理到实践应用的深度探索
  • vscode 使用ssh进行远程开发 (remote-ssh)
  • 【2】搭建k8s集群系列(二进制)之安装etcd数据库集群
  • MySQL学习笔记集--DML
  • 【北京化工大学】 神经网络与深度学习 实验6 MATAR图像分类
  • JeecgBoot AI 应用开发平台,AIGC 功能介绍
  • MCP服务器搜索引擎有哪些?MCP资源网站推荐
  • IdeaVim-AceJump
  • 【Mysql】之存储引擎详解
  • 【UVM学习笔记】更加灵活的UVM—通信
  • oracle asm 相关命令和查询视图
  • 本地部署爆款传输神器 FastSend 并实现外部访问