当前位置:网站首页>递归实现汉诺塔问题
递归实现汉诺塔问题
2022-07-31 04:00:00 【GD_small_bit】
我今天带来了汉诺塔的C语言实现代码。
汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
如下有三根柱子:
游戏规则如下:在a柱上会有n个盘子,并且盘子大的在下面,盘子小的在上面,每次只能移动一个盘子,直到把盘子按从大到小在c柱子往上排列起来。
假设盘子只有一个,那我们直接把盘子从a柱移到了c柱,即a->c。
假设a柱上的盘子有两个,那我们应当将盘子较小的移到b柱,再将盘子较大的移到c盘,再将b柱上的盘子移到c柱,即 a->b , a->c , b->c 这样也完成游戏的任务。
假设a柱上有三个盘子,那我们应当将最小的盘子从a柱移到c柱,再将较小的盘子从a柱移到b柱,再将最小的盘子从c柱移到b柱,再将最大的盘子从a柱移到c柱,再将b柱最小的柱子移到a柱,再将b柱较小的盘子移到c柱,最后把a柱的盘子移到c柱。即 a->c , a->b , c->b , a->c , b->a , b->c , a->c 。
下面是代码实现。
#include<stdio.h>
void move (char pos1,char pos2)
{
printf(" %c->%c ",pos1,pos2);
}
void Hanoi (int n ,char pos1,char pos2,char pos3)
{
if(n==1)
{
move(pos1,pos3);
}
else
{
Hanoi(n-1,pos1,pos3,pos2);
move(pos1,pos3);
Hanoi(n-1,pos2,pos1,pos3);
}
}
int main ()
{
Hanoi(1,'a','b','c');
printf("\n");
Hanoi(2,'a','b','c');
printf("\n");
Hanoi(3,'a','b','c');
printf("\n");
}
运行结果如下:
如果觉得写的可以,关注点一点,下期更精彩。
边栏推荐
- Detailed explanation of TCP (2)
- Daily practice of LeetCode - 138. Copy a linked list with random pointers
- 大小端模式
- 安全20220722
- (4) Recursion, variable parameters, access modifiers, understanding main method, code block
- $attrs/$listeners
- Understanding and Using Unity2D Custom Scriptable Tiles (4) - Start to build a custom tile based on the Tile class (below)
- some of my own thoughts
- (六)枚举、注解
- What skills do I need to learn to move from manual testing to automated testing?
猜你喜欢
Redis实现分布式锁
Port inspection steps - 7680 port analysis - Dosvc service
web容器及IIS --- 中间件渗透方法1
binom二项分布,
【小土堆补充】Pytorch学习笔记_Anaconda虚拟环境使用
(五)final、抽象类、接口、内部类
[C language] Three-pointed chess (classic solution + list diagram)
What is a system?
SIP Protocol Standard and Implementation Mechanism
端口排查步骤-7680端口分析-Dosvc服务
随机推荐
Day32 LeetCode
C language from entry to such as soil, the data store
Understanding and Using Unity2D Custom Scriptable Tiles (4) - Start to build a custom tile based on the Tile class (below)
SIP Protocol Standard and Implementation Mechanism
IDEA常用快捷键与插件
Zotero如何删除自动生成的标签
(五)final、抽象类、接口、内部类
【SemiDrive源码分析】【MailBox核间通信】44 - 基于Mailbox IPCC RPC 实现核间通信(RTOS侧 IPCC_RPC Server 消息接收及回复 原理分析篇)
RESTful api interface design specification
[Paper reading] Mastering the game of Go with deep neural networks and tree search
[C language] General method of expression evaluation
IDEA common shortcut keys and plug-ins
BP神经网络
问题1:给你1-10的列表,实现列表输出,单数在左边,双数在右边。
Just debuted "Fight to Fame", safety and comfort are not lost
Safety 20220712
els 方块向左移动条件判断
Smartcom Programming Level 4 - Magic Academy Lesson 6
els block to the right
Daily practice of LeetCode - 138. Copy a linked list with random pointers