1、我的递归算法(纯粹的递归) 2、书上的一个较慢的纯递归算法,运算15个盘子时,需要41.030s……. 4、网上一个优秀的非递归算法(用栈模仿递归),计算15个盘子时需要6.880s 我在这里根据《数学营养菜》(谈祥柏 著)提供的一种方法,编了一个程序来实现。 include using nam ...
分类:
编程语言 时间:
2017-11-27 00:06:03
阅读次数:
160
1.栈是一种特殊的线性表,它只允许在表的一段进行删除和插入操作,是先进后出的线性表 2.栈的应用形式主要是作为一个第三方的工具使用,比如在递归算法变非递归算法的时候就要借住栈 ...
分类:
其他好文 时间:
2017-09-23 16:12:38
阅读次数:
144
思路 模拟递归程序执行过程,借助一个堆栈,把递归转成非递归算法。 转化过程 1. 递归算法 2. 处理首递归 本函数第2行是结束条件,第5行开始进入首递归。执行第5行函数调用之前,需要保留调用现场,本例中是4个参数入栈,使用新的参数调用hanoi函数。而继续跟踪被调用的函数,可以看出需要一直进行入栈 ...
分类:
编程语言 时间:
2017-09-06 18:17:49
阅读次数:
168
闲来无事,重看了《数据结构》一书,突然发现其中的很多代码写的很精妙,以下就是我对二叉树一部分的做的记录。一般遍历就是使用前序、中序、后序三种遍历,我自己平时都是使用递归算法,今天看书才发现递归算法不是最优解,因为函数调用栈层层叠加,还要保存函数的返回地址,实际参数传递,创建局部变量等等。 一、二叉树 ...
分类:
编程语言 时间:
2017-08-31 21:09:23
阅读次数:
2417
在前面先后介绍了二叉树先序遍历的非递归算法和中序遍历的非递归算法,这里则来介绍二叉树后序遍历非递归算法,二叉树后序非递归遍历真的非常之 重要,因为它具有独特的特性(文章结尾会阐述),所以,在很多与二叉树相关的复杂算法中,经常要用到二叉树后序遍历的非递归算法。并且在互联网面试笔 试也经常考察该算法,所 ...
分类:
编程语言 时间:
2017-07-16 00:09:05
阅读次数:
200
二叉树中序遍历的非递归算法同样可以使用栈来实现,从根结点开始,将根结点的最左结点全部压栈,当结点p不再有最左结点时,说明结点p没有左孩子,将该结点 出栈,访问结点p,然后对其右孩子做同样的处理。 二叉树中序遍历非递归算法实现如下: ...
分类:
编程语言 时间:
2017-07-15 15:49:46
阅读次数:
118
递归完毕树的遍历非常好理解,倘若是非递归。不要告诉我算法导论上有,我要maker的思考过程 既然递归可以实现,那就模拟递归。递归的本质就是压栈。 首先简单树。观察递归的压栈过程 A、B即使节点的数据也代表节点的地址。 对这棵树使用递归完毕前序创建 #include <iostream> using ...
分类:
编程语言 时间:
2017-07-10 23:51:55
阅读次数:
424
定义单链表的结点 我们采用的单链表是带头结点的。 需要遍历一遍链表,在遍历过程中,把遍历的节点一次插入到头部。在这个过程之后,第一个节点成了最后节点,因此要特殊处理,改其后继为NULL。 测试代码: 参考:http://blog.csdn.net/kangroger/article/details/ ...
分类:
编程语言 时间:
2017-06-20 14:59:16
阅读次数:
148
动态规划算法将递归算法写成非递归算法,算法把子问题的答案系统的记录在一个表内。 递归算法的三个例子 零一背包 完全背包 汽车行驶 ...
分类:
编程语言 时间:
2017-06-17 18:19:15
阅读次数:
126
算法概述递归算法简洁明了、可读性好,但与非递归算法相比要消耗更多的时间和存储空间。为提高效率,我们可采用一种非递归的二叉树遍历算法。非递归的实现要借助栈来实现,因为堆栈的先进后出的结构和递归很相似。对于中序遍历来说,非递归的算法比递归算法的效率要高的多。其中序遍历算法的实现的过程如下:(1).初始化 ...
分类:
编程语言 时间:
2017-05-27 15:19:15
阅读次数:
151