走进递归经典——汉诺塔问题详解

简介: 问题👏汉诺塔问题是经典的递归问题。汉诺塔问题是一个经典的问题,汉诺塔(Hanoi Tower)又称河内塔,源于印度一个古老传说:大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘,问该如何操作。

image.png

思路👏

首先我们以最原始的模型开始,也就是一根柱子上三个环说起,过程如下:

image.png

而这其中包含了移动一个环和两个环的情况,所以规律总结如下:

通过分析以上 3 种情况的移动思路,可以总结出一个规律:对于 n 个圆盘的汉诺塔问题,移动圆盘的过程是:将起始柱上的 n-1 个圆盘移动到辅助柱上;起始柱上遗留的 1 个圆盘移动到目标柱上;最后将辅助柱上的所有圆盘移动到目标柱上。由此推演出n个环的场景思路就是拆分成 n-1个时的场景,n-2个时的场景……直到 1个环。

image.png

实现👏

递归的核心在于函数自己调用自己,是创建所需的变量,三根柱子,即创建三个字符类型A,B,C和代表次数的整型n;我用 printf函数模拟它的实验结果;在根据我们所需的计算要求自义定函数 Hanoi,接下来就是把我们的计算过程串联进去,加入魔法,注入灵魂。

#include<stdio.h>
void Hanoi(int n, char a, char b, char c)// 初始化自定义函数Hanoi
  {
    if (1 == n)// if语句首先踢出特殊情况环数为1
    {
      printf("Move %d:from %c to %c\n",n,a, b);// 为1时直接a到b
    }
    else
    {
      Hanoi(n - 1, a, b, c);//>1时,先将(n-1)个盘子从a借助b移到c
      printf("Move %d:from %c to%c\n",n, a, b);//将a上第n个移到b
      Hanoi(n - 1, c, a, b);//将c上的(n-1)个盘子从c借助a移到b
    }
  }
  int main()
  {
  int n = 0;//定义环数n
  printf("please input the number of disks:");
  scanf("%d", &n);
  printf("steps of moving the disks=%d\n", n);
  Hanoi(n, 'A', 'B', 'C');
  return 0;

执行结果如下:(这里假设环数为5)

image.png


相关文章
|
Web App开发 安全 iOS开发
推荐一款超好用的“网盘高速下载”插件
推荐一款超好用的“网盘高速下载”插件
1806 0
|
自然语言处理 Python
使用Python和Qwen模型实现一个简单的智能问答Agent
使用Python和Qwen模型实现一个简单的智能问答Agent
1602 4
|
机器学习/深度学习 Ubuntu 数据挖掘
Ubuntu系统部署Anaconda环境及Python语言的详细流程
以上就是在Ubuntu系统中安装Anaconda环境及Python语言的详细流程。Anaconda为Python科学计算提供了便捷的管理方式,帮助用户轻松处理不同项目之间依赖管理的复杂性。通过以上步骤,你现在应该有了一个完全可用的Anaconda环境,可以开始在Ubuntu上进行Python编程和数据科学项目的探索了。
877 5
|
机器学习/深度学习 自然语言处理 达摩院
长文本口语语义理解技术系列①:段落分割实践
数智化浪潮下,越来越多的企业开始将现代信息网络作为数据资源的主要载体,并通过网络通信技术进行数据传输;网络作为主要的信息交流和分享的方式,海量不同源的网络信息,使得企业与个人消化信息的成本越来越高。音视频数据作为其中重要的信息来源之一,也随着远程视频会议、在线课堂、直播教学、电话销售等领域有了爆炸性的增长。
3877 0
长文本口语语义理解技术系列①:段落分割实践
|
安全 PHP 数据安全/隐私保护
WAF攻防-菜刀&冰蝎&哥斯拉&流量通讯&特征绕过&检测反制&感知
WAF攻防-菜刀&冰蝎&哥斯拉&流量通讯&特征绕过&检测反制&感知
479 0
|
机器学习/深度学习 数据采集 人工智能
如何让大模型更聪明?
如何让大模型更聪明?
|
分布式计算 资源调度 Kubernetes
Spark集群部署与架构
Spark集群部署与架构
|
数据采集 数据可视化 数据挖掘
还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
本文讲解9种『炫酷高级』的数据图表,可视化地表示比例或百分比:哑铃图、甜甜圈图、华夫饼图、堆积条形图...附上代码,快快用起来吧!
1324 2
还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
|
存储 JavaScript 前端开发
计算机毕设-SpringBoot+VUE高效便捷的云存储平台——百度网盘
计算机毕设-SpringBoot+VUE高效便捷的云存储平台——百度网盘
535 0
|
算法 Python
python实现【快速排序】(QuickSort)
python实现【快速排序】(QuickSort)
python实现【快速排序】(QuickSort)