汉诺塔问题分析
来源:互联网 发布:兵器科学与技术 知乎 编辑:程序博客网 时间:2024/06/05 17:34
小白博主今天搞懂了汉诺塔问题。
下面给大家分析一下:
本身对于递归的理解不是很到位,经常把它当作黑盒子使用。
之前没有理解是因为一直在纠结它的栈的操作,运行,掉进了栈坑,一直在扣
着递归调用不放,没理解也弄的自己很乱。
看了书还有知乎大神的提示之后茅塞顿开。
解析:
假设有n个盘子,A,B,C三个塔,目的是最终把A中的盘子移动到C上,B是中转站。
但是过程中不允许大盘子落在小盘子上。
简化过程的思想就是把目的分成三步。
第一步:把n-1个盘子通过C移动到B上。
第二步:把第n个盘子移动到C上。
第三步:把n-1个盘子通过A移动到C上。
所以递归写法如下:
void Hannuota(int n,char a,char b,char c){if(n == 1){Move(a,1,c);}else{Hannuota(n-1,a,c,b);Move(a,n,c);Hannuota(n-1,b,a,c);}}else语句中的三步即为描述的三步,if中的条件是终止入栈的条件,最后再一个个出栈调用move函数输出步骤。
详细代码如下:
#include<stdio.h>void Move(char a,int x,char b){printf("%d :%c →%c\n",x,a,b);}void Hannuota(int n,char a,char b,char c){if(n == 1){Move(a,1,c);}else{Hannuota(n-1,a,c,b);Move(a,n,c);Hannuota(n-1,b,a,c);}}int main(){int n;scanf("%d",&n);Hannuota(n,'A','B','C');return 0;}
阅读全文
1 0
- 汉诺塔问题分析
- 经典汉诺塔问题分析
- 经典汉诺塔问题分析
- 汉诺塔问题分析
- 海盗问题和汉诺塔问题的分析
- 汉诺塔问题递归算法分析:
- 汉诺塔问题递归算法分析
- 汉诺塔问题递归算法分析
- 汉诺塔问题递归算法分析
- 汉诺塔问题递归算法分析
- 问题分析
- 分析问题
- 分析问题
- 问题分析
- LightsService分析 --- 问题分析
- 通过汉诺塔问题分析递归过程
- 算法分析-汉诺塔问题(一)
- 汉诺塔问题分析与python实现
- 文件处理命令tail
- JavaWeb--基础进阶《二》:Java基础-变量与数据类型
- 华为麦芒 6 上手评测:能否继续麦芒 5 的辉煌?
- 翻译 | 关键CSS和Webpack: 减少阻塞渲染的CSS的自动化解决方案
- QNX配置网卡
- 汉诺塔问题分析
- Windows环境下的C++获取当前程序的exe文件路径
- 消除手机上APP启动时的白屏现象
- 12.IO类(C++)
- sql语句中GROUP BY 和 HAVING的使用 count()
- Spring框架中ModelAndView用法分享
- Java-Regular Expression Basic
- linux用户和用户组管理(添加、删除、修改)及说明
- 处理undo回滚段问题