汉诺塔(Tower of Hanoi)--------递归思路
汉诺塔问题简介:
有三根相邻的柱子,标号为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,目的位置是bmove(a, c);//将 1 从起始位置 a 移动到目的位置 chbt(n - 1, b, a, c);//将 n-1 从起始位置 b,通过中转位置a,移动到目的位置 c}}
int main()
{hbt(3, 'A', 'B', 'C');//3就代表有3个盘子,可修改return 0;
}
图示如下:
注意:这里的起始位置,中转位置和目的位置是相对的,最终是要将圆盘从A移到C!!!!!!
汉诺塔(Tower of Hanoi)--------递归思路相关推荐
- 汉诺塔问题详解 递归实现 C语言
目录 一.前言 二.游戏规则 三.思路讲解 四.完整代码 五.最终结果展示 一.前言 汉诺塔:汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子, 其中一根柱子 ...
- java实现求解汉诺塔问题(提示, 使用递归)
实现代码: 求解汉诺塔问题(提示, 使用递归) 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从 ...
- 【汉诺塔】C语言递归解法,深层次地带你理解汉诺塔公式
目录 汉诺塔公式 汉诺塔问题在数学层面的公式: C语言递归公式 两层汉诺塔 三层汉诺塔 递归问题可谓是学习C语言以来的第一个拦路虎,而汉诺塔问题更是递归中对新手很不友好的一道经典题,我们接下来从公式角 ...
- 奇怪的汉诺塔 Four Column Hanoi Tower
奇怪的汉诺塔 题面 传送门 思路 首先考虑三个柱子的汉诺塔: 假设当前有 n n n个盘子: 先把前n-1个盘子从A柱移到B柱,然后把A柱上剩的那一个盘子移动到C柱最后把B柱上的那n-1个盘子移动到C ...
- 经典汉诺塔(Java初学递归篇)
大一学C的时候已经接触到汉诺塔递归的问题,当时只是简单了解过方法,最近开了算法课,打算重新捋一捋. 题目描述: 有三根柱子分别为A.B.C,柱子A上从下到上按金字塔状叠放着n个不同大小 ...
- 用java编写汉诺塔问题_数据结构与算法之汉诺塔问题(Java递归)
汉诺塔问题: 有三根柱子,源杆A,暂存杆temp,目的杆C A上有n层盘子,由小到大向下排列,现需要将A杆的盘子移到C杆中 要求:1)大的盘在下面,小的盘在上面 2)一次只能移动一个盘子 个人思路:先 ...
- 借汉诺塔理解栈与递归
我们先说,在一个函数中,调用另一个函数. 首先,要意识到,函数中的代码和平常所写代码一样,也都是要执行完的,只有执行完代码,或者遇到return,才会停止. 那么,我们在函数中调用函数,执行完了,就会 ...
- c语言递归汉诺塔次数,c语言递归解决汉诺塔参数变化的疑惑
c语言递归解决汉诺塔参数变化的疑惑 答案:3 信息版本:手机版 解决时间 2020-04-05 14:20 已解决 2020-04-05 10:49 #include void main() {vo ...
- c语言函数汉诺塔不用move,C语言——汉诺塔问题(函数递归)
问题概述:古代有一个梵塔,塔内有3个座A,B,C.开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上,有一个老和尚想把64个盘子从A座移动到C座,但是规定每次只允许移动一个盘,且在移动过程中在 ...
- 汉诺塔问题(Hanoi)
汉诺塔问题,是心理学实验研究常用的任务之一.该问题的主要材料包括三根高度相同的柱子和一些大小及颜色不同的圆盘,三根柱子分别为起始柱A.辅助柱B及目标柱C. 相传在古印度圣庙中,有一种被称为汉诺塔(Ha ...
最新文章
- IntelliJ IDEA 2017.3.2 热加载(Hot Swap)
- Javascript高级程序设计第二版第四章--变量,作用域及内存问题--笔记
- C++迭代器使用错误总结
- 十进制小数化为二进制小数的方法是什么_十进制转成二进制的两种方式
- 数据结构实验之排序五:归并求逆序数
- paip.c++ static 变量的定义以及使用...
- MATLAB人脸识别PCA设计
- win10麦克风直接输出声音_win10系统音频前后同时有声音输出的技巧
- 空中交通通信控制设备的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 【jquery-跨域】
- 虚拟机安装pycharm
- 阿里云首发CIPU处理器,这次要抢CPU的C位,为OS反向自研
- markdown编辑器的基本使用
- 【宋红康 MySQL数据库 】【高级篇】【07】MySQL的存储引擎
- 微信公众平台的运营管理
- 信号与系统->系统的时域分析
- 数据禾|2020年江苏省土地利用数据(矢量)
- 美妆B2C电子商务平台说明文档
- 如何访问网络上其他计算机,电脑怎么连接别的网络
- 反射型xss和Dom型xss区别