栈模拟非递归算法递归算法的本质是利用函数的调用栈进行,实际上我们可以自行使用栈来进行模拟,这样的算法空间复杂度为O(h),h为二叉树的高度。前序遍历首先把根节点入栈,然后在每次循环中执行以下操作:此时栈顶元素即为当前的根节点,弹出并打印当前的根节点。把当前根节点的右儿子和左儿子分别入栈(注意是右儿子...
分类:
编程语言 时间:
2015-08-30 11:07:19
阅读次数:
220
递归函数,在函数的执行函数中,需多次进行自我调用。那么,递归函数是如何执行的?先看任意两个函数之间进行调用的情形。用函数和被调用函数[若在函数A中调用了函数B,则称函数A为调用函数,称函数B为被调用函数。]之间的链接及信息交换需通过栈来进行。在上一篇递归函数的讲解中主要对递归的定义和一些应用进行了介绍,最近学习了一点数据结构的知识,看到了递归函数的工作原理其实使用栈来实现的我才恍然大悟。知识学多了...
分类:
其他好文 时间:
2015-08-30 01:07:01
阅读次数:
223
顾名思义,快速排序(quicksort)是在实践中最快的一致排序算法,它的平均运行时间是O(NlogN)。该算法之所以特别快,主要是由于非常精炼和高度优化的内部循环。它的最坏情形的性能为O(N^2),但稍加努力就可以改变这种情形。
像归并排序一样,快速排序也是一种分治的递归算法。将数组S排序的基本算法由下列简单的四步组成:
(1)如果S中元素个数是0或1,则返回。
(2...
分类:
编程语言 时间:
2015-08-29 17:05:28
阅读次数:
167
递归算法
void preorder1(Node *root) //递归前序遍历
{
if (root == NULL) return;
printf("%d ", root->val);
preorder1(root->left);
preorder1(root->right);
}
void inorder1(Node *root) //递归中序遍历
{
if (root == ...
分类:
其他好文 时间:
2015-08-29 17:04:03
阅读次数:
151
阶乘实质上是一种排列组合的规律表达式,它表示从n中取(0-n)个数所有可能的总合。从0取0个数的可能是一种,所以0!=1。从大于0取0个数的可能并没有实际意义,基于此,大于0的阶乘不考虑取0个数的可能(不做累计),从1取1个数的可能为1.阶乘的递归算法:private function factor...
分类:
其他好文 时间:
2015-08-29 12:34:44
阅读次数:
166
在Java学习开始就学习到了递归,以前经常听到递归,但是却没有真正的了解过递归。学习是不断的重复的,在最初的时候,自己所听说到的不了解的,以后肯定会学到。但是前期这个了解的阶段是不可少的,现在体会是越来越深了。这篇博客就简单介绍一下递归算法,首先介绍什么是递归,然后是递归算法的代码展示,最后呈现递归的结果。
什么是递归
定义
递归是自身调用的一种编程技巧,递归...
分类:
编程语言 时间:
2015-08-28 21:34:56
阅读次数:
162
今天无所事事,于是重温了一下递归算法。突然之间发现递归算法很好用。 首先碰到的是这样的一首题目:计算数组{1,1,2,3,5,8.......} 第30位值,不用递归,我写出了以下这样的代码:staticvoidMain(string[]args){int[]num=newint[30];num[0...
分类:
编程语言 时间:
2015-08-28 02:04:33
阅读次数:
165