经典递归 - 汉诺塔问题

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

最近,想复习一下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数据类型的操作方法了,也是这个系列的最后一篇文章了。
659 0
|
存储 小程序 Linux
【Linux从入门到精通】C语言模拟实现进度条小程序
在Linux下,我们安装软件时会经常看到进度条,来告知我们安装的进度。我们不妨自己模拟实现一个进度条,看看其中的细节。模拟实现进度条并不困难,但其中的细节我们又不可忽视。本篇文章会对模拟实现进度条进行详解。
646 1
|
存储 Kubernetes NoSQL
podman pod
podman pod
685 0
|
机器学习/深度学习 编解码 算法
目标检测算法之FPN(附FPN代码实现)
目标检测算法之FPN(附FPN代码实现)
目标检测算法之FPN(附FPN代码实现)
|
缓存 负载均衡 算法
今天终于彻底搞懂 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(第三方) 五、动静分离
326 0
今天终于彻底搞懂 Nginx 的五大应用场景
|
22天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
9222 29
|
21天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
4532 16
|
8天前
|
存储 人工智能 并行计算
大模型本地部署终端选型方法论:以 Qwen3.8-27B 为例的四档分层完整流程
本文提出一套大模型本地部署终端选型方法论:定约束、定档位、定框架、定参数四步决策法,配合入门、主力、质量、无损四档分层模型。以 Qwen3.8-27B 实测数据为例,逐环节解读显存、带宽、存储、散热、系统、预算等要素,给出面向不同预算的优选方案、决策自查清单与市场观察框架。文末前瞻 AI 笔记本的 CPU+GPU 与统一内存两条路线,论证四步决策法在新品类上的延续性。

热门文章

最新文章