汉诺塔(Tower of Hanoi)--------递归思路

2023-11-06

汉诺塔问题简介:

有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移到柱子C上,并且每次移动,同一根柱子上都只能是大盘子在下,小盘子在上,请问至少需要多少次移动?

汉诺塔问题分析:

1.     若只有1个圆盘,就只需要移动 1 次,即 A → C;

2.     若有两个圆盘,则需要移动 3 次,即 A→B,A→C,B→C;

 3.    若有三个圆盘,则需要移动 7 次,即 A→ C,A→ B,C→ B,A→ C,B→ A,B→ C,A→ C

依此类推.......

汉诺塔问题的递归思路:

将 n 个圆盘分为 n-1 (即除最低层的圆盘)与 1 (即最底层的圆盘),将n-1个圆盘移动到中转位置,将1移动到目的位置,再将 n-1 分为 (n-1)- 1 与 1,将(n-1)- 1 移动到中转位置,将1移动到目的位置,依次类推......

代码如下:

#include<stdio.h>
//打印每一步的操作
void move(char a, char b)
{
	printf(" %c -> %c ", a, b);
}
//n:有几个盘子
//a:起始位置
//b:中转位置
//c:目的位置
void hbt(int n, char a, char b, char c)
{
	if (n == 1)
		move(a, c);
	else//n>=2时
	{
		hbt(n - 1, a, c, b);
        //此时n-1的起始位置是a,中转位置是c,目的位置是b
		move(a, c);
        //将 1 从起始位置 a 移动到目的位置 c
		hbt(n - 1, b, a, c);
        //将 n-1 从起始位置 b,通过中转位置a,移动到目的位置 c
	}

}
int main()
{
	hbt(3, 'A', 'B', 'C');
    //3就代表有3个盘子,可修改
	return 0;
}

 图示如下:

 注意:这里的起始位置,中转位置和目的位置是相对的,最终是要将圆盘从A移到C!!!!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汉诺塔(Tower of Hanoi)--------递归思路 的相关文章

随机推荐

  • The GNU nano text editor (文本编辑器)

    The GNU nano text editor 文本编辑器 https www nano editor org GNU nano is a small and friendly text editor 1 GNU nano The GNU
  • 服务端缓存

    CDN缓存 用户浏览器与服务器的交互流程 客户端浏览器先检查是否有本地缓存是否过期 如果过期 则向CDN边缘节点发起请求 CDN边缘节点会检测用户请求数据的缓存是否过期 如果没有过期 则直接响应用户请求 此时一个完成http请求结束 如果数
  • 救世之树服务端开服架设服务器搭建教程

    救世之树服务端开服架设服务器搭建教程 救世之树架设教程 准备好服务端 版本 服务器 域名开始实操 我是艾西 需要给服务器开启虚拟内存 设置好后服务器需要重启下 第一步 解压服务端到D盘 右键 000 修改计算机名 ps1使用powershe
  • VMware15安装及Linux环境搭建教程

    VMware15安装及Linux环境搭建教程 A 软件安装 B 新建虚拟机环境 附加题 C 文件与网络 文件设置 网络设置 对于很多计算机类专业的学生来说 经常有在Linux系统上进行开发的需要 本文介绍了如何利用VMware在Window
  • js数组常用方法

    JavaScript是一种高级编程语言 广泛应用于Web开发 在JavaScript中 数组是一种常用的数据类型 它可以用来存储一组值 这些值可以是任何类型 包括数字 字符串 对象等 JavaScript数组提供了许多强大的操作方法 可以帮
  • jmeter学习所采的坑

    1 jdk安装是32位与jmeter版本不兼容 jdk安装是32位 jmeter5 4 1 卸载jdk安装64后问题解决 2 jmeter安装后保存不了测试计划 解决方案 各种百度 最后在选项 外观 选择windows 可以保存测试计划 3
  • (代码审计)zzcms存储型XSS

    1 漏洞成因是stripfxg 函数引起的 先来看看这个函数 inc function php function stripfxg string htmlspecialchars decode false nl2br false 去反斜杠
  • flask mvc模式开发_MVC设计模式

    MVC的全名是Model View Controller 是模型 Model 视图 view 控制器 controller 的缩写 是一种设计模式 它是用一种业务逻辑 数据与界面显示分离的方法来组织代码 将众多的业务逻辑聚集到一个部件里面
  • RuntimeError: Error(s) in loading state_dict for BASE_Transformer

    最近跑一个深度学习变化检测的项目BIT CD 严格按照作者的说明页进行训练和测试 但是跑出来的模型就是无法正常工作 而用作者的预训练模型就正常工作 百思不得其解 根据错误 逐步调试 输出 总算是找到了问题的所在 其实这个问题如果对于老手 估
  • 全面解析大语言模型的工作原理

    当ChatGPT在去年秋天推出时 在科技行业乃至世界范围内引起了轰动 当时 机器学习研究人员尝试研发了多年的语言大模型 LLM 但普通大众并未十分关注 也没有意识到它们变得多强大 如今 几乎每个人都听说过LLM 并有数千万人用过它们 但是
  • 3D模型的渲染,这一篇就够了

    3D模型的渲染 这一篇就够了 效果图及源码 1 mapbox 2 threebox tube line logistics raycaster mercator object3D 效果图及源码 1 mapbox https docs map
  • ORACLE(student)表习题与答案

    1 查询Student表中的所有记录的Sname Ssex和Class列 SELECT sname ssex class FROM student 2 查询教师所有的单位即不重复的Depart列 SELECT distinct depart
  • 集中式日志存储架构

    Hello大家好 欢迎回来 我们今天的视频课程要讨论的内容是 AWS的集中式日志存储架构 包括集中式日志存储架构需要考虑的事项 以及使用了两个AWS账户对架构的实现做了个快速的演示 我们开始今天的内容 集中式日志存储架构 当前 在绝大多数组
  • 对话力码科技:保险科技应用有待深入,价值落地更重要

    保险行业的数字化时机已来 更加专业化的企业才能立于不败之地 数科星球原创 作者丨苑晶 编辑丨大兔 对于国内的大多数企业来说 2023年是个极为重要的年份 在软件行业 随着人工智能等新技术的日益成熟和普及 软件行业迎来黄金时代 在这种趋势下
  • 多点双向重发布

    实验题目 要求 1 两个协议间进行多点双向重发布 2 R7的环回没有宣告在OSPF协议中 而且是后期重发布进去 3 解决环路 所有路径选择最优 且存在备份 实验拓扑图 IP地址与ospf和rip的配置 R1 int g0 0 0 ip ad
  • 华为OD机试真题-计算网络信号 【2023.Q1】

    题目内容 网络信号经过传递会逐层衰减 且遇到阻隔物无法直接穿透 在此情况下需要计算某个位置的网络信号值 注意 网络信号可以绕过阻隔物 array m n 的二维数组代表网格地图 array i j 0代表i行j列是空旷位置 array i
  • 开源协议比较:BSD、Apache、GLP、LGLP、MIT

    BSD开源协议 original BSD license FreeBSD license Original BSD license BSD开源协议是一个给于使用者很大自由的协议 基本上使用者可以 为所欲为 可以自由的使用 修改源代码 也可以
  • Python报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte的最新解决办法2022-09-30

    合并txt文件内容时候 Python报错UnicodeDecodeError gbk codec can t decode byte 这个错误是做NLP的小伙伴常见的一个错误 报错原因是读取的文件中有中文 网上找到的解决办法 将 with
  • ProtocolBuffers-3.0.0 For Objective C 的快速集成指南

    一 前言 最近调研 Google的Protocol Buffer 在网上看了几篇相关博客 发现他们讲的都比较复杂 所以就想写一篇简单点的文章 配置环境 mac OS 10 11 5 Xcode7 3 二 Protocol Buffer简介
  • 汉诺塔(Tower of Hanoi)--------递归思路

    汉诺塔问题简介 有三根相邻的柱子 标号为A B C A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘 要把所有盘子一个一个移到柱子C上 并且每次移动 同一根柱子上都只能是大盘子在下 小盘子在上 请问至少需要多少次移动 汉诺塔问题分析 1