汉洛塔hanoi递归问题
问题:
Hanoi(汉诺)塔问题。古代有一个梵塔,塔内有3个座A,B,C。开始时A座上有64个盘子,盘子大小不等,大的在下,小的在
上。有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B座。要求编程序输出移动盘子的步骤
核心:
在于理解,需要针对两个目标对象,进行递归。
A将64个盘子,移动到C。此时,把A看作是递归对象。需要将63个盘子,移动到B,将最后一个大盘,移动到C。
B将63个盘子,移动到C。此时,吧B看作是递归对象。需要将62个盘子,移动到A,将最后一个大盘,移动到C。
代码:
注意:这里汉洛塔,指定的次数为5次。
#include <stdio.h>int total_num = 0;void hanoi(int num, char a, char b, char c);
void move(char a, char b);int main()
{printf("welcome to use hanoi\r\n");hanoi(5, 'A', 'B', 'C');printf("move total num = %d\r\n", total_num);return 0;
}void hanoi(int num, char a, char b, char c)
{if(1 == num){move(a, c);}else{hanoi(num -1, a, c, b);move(a, c);hanoi(num -1, b, a, c);}}void move(char a, char b)
{printf("%c -> %c\r\n", a, b);total_num++;
}
输出:
[root@localhost test]# ./demo
welcome to use hanoi
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
A -> B
C -> B
C -> A
B -> A
C -> B
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
B -> A
C -> B
C -> A
B -> A
B -> C
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
move total num = 31
[root@localhost test]#
汉洛塔hanoi递归问题相关推荐
- 数据结构与算法—递归算法(从阶乘、斐波那契到汉诺塔的递归图解)
目录 递归介绍 递归求阶乘 递归求斐波那契 递归解决汉诺塔 总结 递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的 ...
- labview求n阶乘的和_递归算法(从阶乘、斐波那契到汉诺塔的递归图解)
递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的. 对于递归要分清以下概念: 自己调用自己 递归通常不在意具体操作 ...
- 【恋上数据结构】递归(函数调用过程、斐波那契数列、上楼梯、汉诺塔、递归转非递归、尾调用)
递归(Recursion) 什么是递归? 函数的调用过程(栈空间) 函数的递归调用过程 递归实例分析(1 + 2 + 3 + ... + 100 的和) 递归的基本思想.使用套路 斐波那契数列 fib ...
- 【头歌】汉诺塔(Hanoi)的递归算法
任务描述 本关任务:汉诺塔(Hanoi)的递归算法. 相关知识 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到 ...
- 汉诺塔——经典递归问题(c语言实现)
汉诺塔--经典递归问题(c语言实现) 问题背景 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下 ...
- 汉诺塔(Hanoi)递归算法
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置64个金盘. 游戏的目标:把A杆上的金盘全部移到C杆 ...
- c语言程序设计电子图书 汉诺塔,用C写的汉诺塔(hanoi)程序
用C写的汉诺塔(hanoi)程序 分类:计算机等级 | 更新时间:2016-07-07| 来源:转载 #include void movedisc(unsigned n,char fromneedle ...
- 汉诺塔的递归逐步详解
文章目录 汉诺塔介绍 递归代码实现 以三个盘子为例逐步详解 汉诺塔介绍 如上图,有三根柱子A,B,C,在A柱子上有N个盘子(图上只画了三个),利用这三根柱子和N个盘子进行汉诺塔游戏,需要最终将A柱子上 ...
- 汉诺塔问题 [递归 + 抽象]
汉诺塔 前言 一.题意 二.抽象思维 1.源码 三.扩展 1.分析 2.源码 总结 参考文献 前言 汉诺塔问题,是学习递归的第一个算法题,也是非常经典的递归问题.由于它是双递归问题,所以初学时不易理解 ...
- 1-算法-hanoi汉诺塔问题- 递归
汉诺塔问题用递归解决 问题抽象 递归都是从最原始的地方回溯 到解决这个大问题 Void hanoi(int n,char A,char B,char C) {if(n == 1) move(1,A,C ...
最新文章
- 著名作者网站论文下载
- 大佬告诉你JavaScript面试题大全之基础面试题(附答案)
- linux 互斥锁销毁_c-销毁锁定的互斥锁时pthread_mutex_destroy的正...
- 在最长的距离二叉树结点
- C语言中()和【】的区别?
- 学生上课睡觉班主任怎么处理_【师问师答】学生上课说话,点名批评还嘴怎么办?...
- congruent matrix
- 55个javascript经典用法
- 边缘计算工作负载:虚拟机,容器还是裸机?
- Matlab美图秀秀
- 启动Apache时提示缺少vcruntime140.dll怎么解
- 关于如何将SQL2008 R2数据库迁移到SQL2008
- 中华酷联发展电商,警惕京东,且行且思考
- Visio中字体与Word中字体的对应
- 倪光南:友友云计算中间件体现后发优势
- 机器学习中的数学基础--特征函数与中心极限定理,统计学基本概念,极大似然估计,最大后验估计
- 不错的U3D第一人称射击类游戏教程
- android新浪微博改进版
- Python中正确显示中文和负号
- 游戏日常运营数据:DAU分解及留存
热门文章
- html标签中写onclick,HTML a 标签添加 onclick()事件的几种方式
- 九爷带你了解 mctop: 监视 Memcache 流量
- vue3 去除百度地图右上角地图类型展示
- 三重积分的概念,计算(先一后二(投影穿线法))
- 华为认证hcip怎么找工作?考取华为认证hcip证书可以做什么?
- 各种水龙头拆卸图解_各种水龙头拆卸图解
- Linux Ubuntu系统fwknop单包授权认证(SPA)流程
- Python读取图像数据的常用方法
- FireFox-background
- 请假时间计算方式java_java计算两段时间的重复天数