递归5--汉诺塔问题的栈实现

汉诺塔的递归解法:http://www.cnblogs.com/Renyi-Fan/p/6949515.html

一、心得

系统里面的递归就是靠栈来维护的,
区别我们普通栈的是维护递归的那个栈有返回地址
递归每深入一层,栈顶元素加一
递归每退出一层,栈顶元素减一
返回地址是执行完这一层,返回到上一层的地址

就是从栈里面取元素然后操作这个元素,如此循环往复,和队列操作几乎完全一样
然而这里用队列不得行,因为最前面的问题分解的子问题没有放在队列最前面

二、分析

三、代码及结果

 1 /*
 2 汉诺塔问题的栈实现
 3 f(n)=f(n-1)+1+f(n-1)
 4 Problem(n,'A','B','C')=Problem(n-1,'A','C','B')+Problem(1,'A','B','C')+Problem(n,'B','A','C')
 5 队列不得行,因为最前面的问题分解的子问题没有放在最前面
 6 */
 7 #include <iostream>
 8 #include <stack>
 9 using namespace std;
10
11 struct Problem{
12     int n;
13     char src,mid,dest;
14     Problem(int nn,char s,char m,char d):n(nn),src(s),mid(m),dest(d){
15     }
16 };//一个Problem变量代表一个子问题,将src上的n个盘子
17 //一mid为中介,移动到dest
18 stack<Problem> stk;//用来模拟递归的栈,一个元素代表依次操作
19 //若有n个盘子,则栈的高度不超过n*3,因为出来一个数,进去三个数
20 int main(){
21     int n;
22     cin>>n;
23     stk.push(Problem(n,'A','B','C'));//初始化第一轮操作
24     while(!stk.empty()){//只要栈中还有数据,就接着处理
25         Problem curPrb=stk.top();//取最上面的那个子问题,即当前问题
26         stk.pop();//因为要对刚刚那个子问题进行操作,所以让子元素直接出栈
27         if(curPrb.n==1) cout<<curPrb.src<<"->"<<curPrb.dest<<endl;
28         else{
29             //分解子问题,子问题要逆序放,因为栈是先进后出
30             //先把分解得到的第三个子问题放入栈中
31             stk.push(Problem(curPrb.n-1,curPrb.mid,curPrb.src,curPrb.dest));
32             //再把第二个子问题放入栈中
33             stk.push(Problem(1,curPrb.src,curPrb.mid,curPrb.dest));
34             //最后放第一个子问题, 后放入栈的子问题先被处理
35             stk.push(Problem(curPrb.n-1,curPrb.src,curPrb.dest,curPrb.mid));
36
37         }
38     }
39     return 0;
40 } 

转载于:https://www.cnblogs.com/Renyi-Fan/p/6955068.html

递归5--汉诺塔问题的栈实现相关推荐

  1. C++非递归解决汉诺塔问题

    汉诺塔问题简述:将塔A上的n个大小不一的盘子借由塔B全部移动到塔C上,且在过程中不能将大盘子放在小盘子上.                  目录 1.算法: 2.具体效果: 3.SeqStack.c ...

  2. c语言递归汉诺塔次数,c语言递归解决汉诺塔参数变化的疑惑

    c语言递归解决汉诺塔参数变化的疑惑 答案:3  信息版本:手机版 解决时间 2020-04-05 14:20 已解决 2020-04-05 10:49 #include void main() {vo ...

  3. Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏

    Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏 目录 输出结果 核心代码 输出结果 核心代码 def hanoi(n,x,y,z):if n==1:print(x,'--→',z) ...

  4. Python递归实现汉诺塔

    Python递归实现汉诺塔: def f3(n,x,y,z): if(n==1):print(x,'--->',z)else:f3(n-1,x,z,y)print(x,'--->',z)f ...

  5. c语言递归解决汉诺塔问题

    c语言递归解决汉诺塔问题 参考文章: (1)c语言递归解决汉诺塔问题 (2)https://www.cnblogs.com/didiaoxiaoguai/p/6686407.html 备忘一下.

  6. c语言 统计数量用count_C语言编程学习之递归实现汉诺塔图解!还有零基础入门视频~...

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  7. C语言——生存期和存储类型、递归、递归求解汉诺塔、快速排序

    目录 一.生存期和存储类型 1.生存期 2.存储类型 3.自动变量(auto) 4.寄存器变量(register) 5.静态局部变量(static) 6.static 和 extern 二.递归 1. ...

  8. python实现汉诺塔递归经典算法_Python递归实现汉诺塔算法示例

    本文实例讲述了Python递归实现汉诺塔算法.分享给大家供大家参考,具体如下: 最近面试题,面试官让我5分钟实现汉诺塔算法(已然忘记汉诺塔是啥). 痛定思痛,回来查了一下汉诺塔的题目和算法.题干与实现 ...

  9. 2.2基本算法之递归和自调用函数_用栈算法递归解决汉诺塔问题

    今天博主收一下线性表的尾,最近我们要学习的内容是栈和队列板块,栈和队列板块分为两讲,第一讲也就是今天我们主要学习栈的相关知识,包括栈的定义.栈的顺序表示及实现,栈的链式表示,栈的应用举例,以及栈递归实 ...

  10. ICS计算系统概论LC3汇编实验Lab5—中断、递归解决汉诺塔问题

    Lab Purpose 完成用户程序的编写. 编写下面描述的键盘中断服务例程. condition: 用户程序: 汉诺塔的参数,记录为N,将用xFFFF初始化并存储在X3FFF内存中. 您的用户程序从 ...

最新文章

  1. Codeforces 359D Pair of Numbers | 二分+ST表+gcd
  2. MATLAB字符数组和空数组
  3. 10-Bootstrap Checksedit
  4. python代码怎么运行_使用Joblib并行运行Python代码
  5. JNI调用两层C++动态库
  6. 11gR2 Grid Infrastructure Installation prerequisites On LINUX
  7. VSCode调试Python时终端输出中文乱码解决方法1
  8. NVM:使用NVM后报错npm:command not found
  9. 【Python】Python IDLE 设置清屏功能(清屏快捷键Ctrl+w,亲测通用)
  10. 根据小米商城官网首页效果敲写页面
  11. MCE | 线粒体和能量代谢的关系
  12. Coprime Triples——CodeChef - COPRIME3
  13. SIGIR'22 | 阿里 ESCM^2: 升级版全空间多任务转化率预估
  14. 【AE-MG动画全套学习教程】After Effects CC MG动画高效学习视频全套
  15. 点集拓扑学(1)——度量空间
  16. 9月17日服务器维护,《海岛纪元》9月17日维护公告 「失落之城」正式开服
  17. SaaS应用价值存巨大争议
  18. C++常用数据结构或技巧
  19. Windows AutoPilot简介转载学习
  20. 华为社招嵌入式软件面试_华为OD社招面试(技术二面完)--总结复盘

热门文章

  1. ffmpeg 花屏的问题
  2. 目标追踪-背景差算法
  3. linux黑板模式,敲黑板!怎样使用 Linux stat 命令创建灵活文件列表?
  4. python怎么做软件程序_Revit二次开发python怎么做?人工智能python语言在BIM软件高效建模的运用尝试...
  5. 【Flink】Flink flink-runtime.version.properties generated correctly. You MUST run mvn generate-source
  6. 【flink】RocksDB介绍以及Flink对RocksDB的支持
  7. 【kafka】InconsistentGroupProtocolException: The group member‘s supported protocols
  8. 【SpringCloud】Spring cloud Alibaba Sentinel 热点规则
  9. 【算法】BloomFilter 与 CuckooFilter
  10. 【Mac】Mac下SSH免密登录localhost