经典递归 - 汉诺塔问题

简介: 经典递归 - 汉诺塔问题

最近,想复习一下C语言,所以笔者将会在掘金每天更新一篇关于C语言的文章! 各位初学C语言的大一新生,以及想要复习C语言/C++知识的不要错过哦! 夯实基础,慢下来就是快!


汉诺塔问题


百度百科


汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。


不管这个传说的可信度有多大,如果考虑一下把64片金片,由一根针上移到另一根针上,并且始终保持上小下大的顺序。这需要多少次移动呢?这里需要递归的方法。假设有n片,移动次数是f(n).显然f(1)=1,f(2)=3,f(3)=7,且f(k+1)=2*f(k)+1。此后不难证明f(n)=2^n-1。n=64时, 假如每秒钟一次,共需多长时间呢?一个平年365天有31536000秒,闰年366天有31622400秒,平均每年31557600秒,计算一下: 18446744073709551615秒


问题分析


A上面放的盘子上面小下面大,借助B盘,将A中的盘子移动到C,移动时要保证B,C的盘子都是上面小下面大,要一个一个盘子移动


image.png


解决方法

解决方法:

1.把A中的n-1个盘子通过C移动到B

2.把A中的剩余的1个盘子移到C

3.把B中的n-1个盘子,通过A移到C 不断递归


代码分析

void move(char pos1, char pos2)
{
  printf("%c->%c ", pos1, pos2);
}
/*
n:要移动的盘子数,
pos1:起始位置
pos2:中转位置
pos3:目的位置
*/
void Hanoi(int n, char pos1, char pos2, char pos3)
{
  if (n == 1)
  {
    move(pos1, pos3); //只有一个盘子,直接从pos1->pos3
  }
  else
  {
    /*(1)以C盘为中介,从A杆将1至n - 1号盘移至B杆;
    (2)将A杆中剩下的第n号盘移至C杆;
    (3)以A杆为中介;从B杆将1至n - 1号盘移至C杆。*/
    Hanoi(n - 1, pos1, pos3, pos2); //以C盘为中介,从A杆将1至n - 1号盘移至B杆
    move(pos1, pos3);//将A杆中剩下的一个盘移至C杆;
    Hanoi(n - 1, pos2, pos1, pos3);//以A杆为中介;从B杆将1至n - 1号盘移至C杆。
  }
}
int main()
{
  Hanoi(3, 'A', 'B', 'C');
  return 0;
}
复制代码

明天将会给大家带来经典下一个经典的递归问题-青蛙跳台阶问题!欢迎大家关注



相关文章
|
NoSQL 数据处理 Redis
细说一下RedisTemplate的使用方法(十二)
上篇文章中学习了操作Redis中Set数据类型的两个主要方法,分别是opsForSet方法和boundHashOps方法,这两个方法也是目前最为常用的操作Set数据类型的方法了。今天我们就要来看下一个Redis数据类型的操作方法了,也是这个系列的最后一篇文章了。
649 0
|
机器学习/深度学习 编解码 算法
目标检测算法之FPN(附FPN代码实现)
目标检测算法之FPN(附FPN代码实现)
目标检测算法之FPN(附FPN代码实现)
|
存储 小程序 Linux
【Linux从入门到精通】C语言模拟实现进度条小程序
在Linux下,我们安装软件时会经常看到进度条,来告知我们安装的进度。我们不妨自己模拟实现一个进度条,看看其中的细节。模拟实现进度条并不困难,但其中的细节我们又不可忽视。本篇文章会对模拟实现进度条进行详解。
632 1
|
存储 Kubernetes NoSQL
podman pod
podman pod
676 0
|
缓存 负载均衡 算法
今天终于彻底搞懂 Nginx 的五大应用场景
一、HTTP服务器 1、 首先在文档根目录Docroot(/usr/local/var/www)下创建html目录, 然后在html中放一个test.html; 2、 配置nginx.conf中的server 3、访问测试 4、指令简介 5、location uri正则表达式 二、静态服务器 1、在/usr/local/var/www 下分别创建images和img目录,分别在每个目录下放一张test.jpg 三、反向代理 四、负载均衡 1. RR(round robin :轮询 默认) 2. 权重 3. ip_hash 4. fair(第三方) 5. url_hash(第三方) 五、动静分离
313 0
今天终于彻底搞懂 Nginx 的五大应用场景
|
11天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
|
11天前
|
人工智能
千问办公官网入口:阿里AI办公QwenWork产品页和免费网页端链接
千问办公官网含两大入口:一是网页端(qwenwork.cn),即开即用,支持浏览器直接访问;二是阿里云产品页 https://t.aliyun.com/U/JNKJuO 提供免费/付费版详情、功能介绍及使用指南。
|
18天前
|
网络协议 Linux iOS开发
【2026实测】Wireshark下载+安装+汉化+使用教程(图文版,巨详细)
Wireshark 是一款免费开源的网络协议分析工具,可实时捕获、解析并可视化数据包,助你诊断网络故障、分析通信协议(如HTTP、DNS、TCP等)。支持Windows/macOS/Linux,含中文界面,新手入门便捷。(239字)
|
10天前
|
IDE 开发工具
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
Qoder国际版上线全新内置大模型Sonus(/ˈsoʊnəs/),全球领先,专精超长任务执行与电脑操作(Computer Use)。配合Qoder桌面端0.2.3版本,可自主完成编程、金融建模、科研及表格制作等复杂工作。现全面支持Qoder全系产品,效率提升3.2倍。
1185 8
Qoder 上线 Sonus 模型,Computer Use 能力全面增强

热门文章

最新文章