首页/新闻资讯/正文详情

汉诺塔宏观表示 —— C语言

发布时间:2026/9/24 12:00:01 来源:云帆数科 栏目:资讯中心
汉诺塔宏观表示 —— C语言
引言初次学习递归时汉诺塔作为典型例题难倒了不少初学者。这是因为初学者们总是想细致地、一步一步地观察出其移动步骤这显然是难以做到的。因此我们可以先从宏观上入手。汉诺塔http://ybt.ssoier.cn:8088/problem_show.php?pid1205汉诺塔介绍汉诺塔Tower of Hanoi是源于印度古老传说的益智玩具由法国数学家爱德华·卢卡斯于1883年正式提出。它不仅是经典的智力游戏更是计算机科学中讲解递归算法最经典的案例之一。传说在世界中心贝拿勒斯的圣庙里一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界时在其中一根针上从下到上穿好了由大到小的64片金片。僧侣们按照以下法则日夜不停地移动这些金片一次只移动一片不管在哪根针上小片必须在大片上面。预言说当所有的金片都移到另一根针上时世界就将在一声霹雳中消灭。汉诺塔问题可以抽象为有三根柱子通常标记为 A、B、C初始时 A 柱上从下到上按大小顺序叠放着 n 个圆盘。目标是将所有圆盘移动到 C 柱上移动过程中必须遵守以下规则每次只能移动一个圆盘每次只能移动柱子最顶层的圆盘任何时刻大盘不得置于小盘之上。解决问题我们可以先从简单的例子入手当 n1 时步骤如下图只需要一步 A → B当 n2 时步骤如下图需要 3 步 A → C A → B C → B当 n3 时我们可以将积木拆解成 n 与 n-1 当成只有两块积木时来做。先将 n-1 A → C类似于 n2将 B C 柱子互换完成再将 n A - B最后 n-1 C → B代码实现#define _CRT_SECURE_NO_WARNINGS #include stdio.h void dfs(int n, char a, char c, char b)//将 n 从 a 借助 c 移动到 b { if (n 0) // 如果没有积木则直接返回 return; dfs(n - 1, a, b, c); // 将 n-1 从 a 借助 b 移动到 c printf(%c-%d-%c\n, a, n, c); // 输出 n 从 a 移动到 c 的过程 dfs(n - 1, c, a, b); // 再将 n-1 从 c 借助 a 移动到 b } int main() { int n 0; scanf(%d, n); dfs(n, a, c, b);// 将 n 从 a 借助 c 移动到 b return 0; }通过宏观方式我们只需要了解函数原理不去探讨每一步具体如何移动更加适合初学者来理解汉诺塔的原理。

相关推荐

STM32 VBAT电路设计避坑指南:从RTC失效到工业级可靠供电
STM32 VBAT电路设计避坑指南:从RTC失效到工业级可靠供电

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:59:42

LRU 缓存算法详解
LRU 缓存算法详解

LRU 缓存算法 一、什么是 LRU LRU(Least Recently Used,最近最少使用)是一种常见的缓存淘汰策略。 核心思想:当缓存空间满了,优先淘汰"最久没有被访问过"的数据,因为我们认为"最近被访问过的… · 2026/9/24 11:59:36

A2B数字麦克风从零跑通:AD2428主从配置与SigmaStudio实战
A2B数字麦克风从零跑通:AD2428主从配置与SigmaStudio实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:59:36

单片机计算机毕设之基于 STM32 单片机的 Android 移动端远程控制投喂平台设计 基于 STM32 的按键参数配置与物联网智能水族系统设计(011409)
单片机计算机毕设之基于 STM32 单片机的 Android 移动端远程控制投喂平台设计 基于 STM32 的按键参数配置与物联网智能水族系统设计(011409)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️… · 2026/9/24 12:28:26

双击“此电脑”卡死?零成本修复资源管理器卡顿问题
双击“此电脑”卡死?零成本修复资源管理器卡顿问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 12:28:13

SimVision实战:从APB寄存器写失败看RTL调试的高效打法
SimVision实战:从APB寄存器写失败看RTL调试的高效打法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 12:28:13

Python书籍推荐系统设计:协同过滤+内容推荐实现
Python书籍推荐系统设计:协同过滤+内容推荐实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 12:28:13

基于STM32 USB Host的多路CH340虚拟串口扩展方案详解
基于STM32 USB Host的多路CH340虚拟串口扩展方案详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 12:28:13

Halcon九点标定手眼标定全流程:从原理到实战避坑指南
Halcon九点标定手眼标定全流程:从原理到实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 12:28:06

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码