当前位置:网站首页>递归实现汉诺塔问题
递归实现汉诺塔问题
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");
}
运行结果如下:
如果觉得写的可以,关注点一点,下期更精彩。
边栏推荐
- Redis 使用LIST做最新评论缓存
- qlib架构
- type_traits元编程库学习
- How Zotero removes auto-generated tags
- C primer plus study notes - 8, structure
- Day32 LeetCode
- (树) 最近公共祖先(LCA)
- Daily practice of LeetCode - 138. Copy a linked list with random pointers
- VS QT - ui does not display newly added members (controls) || code is silent
- IDEA常用快捷键与插件
猜你喜欢

The application and practice of mid-to-platform brand advertising platform

大小端模式

Knowledge Distillation 7: Detailed Explanation of Knowledge Distillation Code

IDEA comment report red solution

endian mode

强化学习:从入门到入坑再到拉屎

BP神经网络
![[C language] General method of expression evaluation](/img/59/cf43b7dd16c203b4f31c1591615955.jpg)
[C language] General method of expression evaluation

Win10 CUDA CUDNN 安装配置(torch paddlepaddle)

A brief introduction to the CheckBox component of the basic components of Flutter
随机推荐
Difference between unallocated blocks and unused blocks in database files
(六)枚举、注解
Redis counts new and retained users
SQL Interview Questions (Key Points)
[CV project debugging] CUDNN_CONVOLUTION_FWD_SPECIFY_WORKSPACE_LIMIT problem
some of my own thoughts
Safety 20220715
Component pass value provide/inject
Ambiguous method call.both
数据库文件中的未分配的块和未使用的块的区别
浅识Flutter 基本组件之CheckboxListTile组件
Zotero如何删除自动生成的标签
Redis实现分布式锁
PMP WeChat group daily exercises
[C language] General method of base conversion
C primer plus study notes - 8, structure
(八)Math 类、Arrays 类、System类、Biglnteger 和 BigDecimal 类、日期类
Redis implements distributed locks
【论文阅读】Mastering the game of Go with deep neural networks and tree search
安全20220709


