摘要:
* 消除递归:
* 一个算法作为一个递归的方法通常从概念上很容易理解,但实际使用中递归的效率不高,在这种
* 情况下,把递归算法转换成非递归的算法是非常有用的,这种转换经常用到栈。
*
* 递归和栈:
* 递归和栈之间有着紧密的联系,大部分的编译器使用栈实现递归的。
*
* 调用方法的时候发生什么:
* 1. 编译器会把这个方法所有当前参数及返回地址压入栈中;
* 2. 将控制权交给这个方法,方法通过获得栈顶元素值访问参数;
* 3. 方法运行结束的时候,值退栈,参数消失且控制权重新回到返回地址; 阅读全文
摘要:
* 概念介绍:
*
* 归并排序:归并算法的中心是归并两个已经有序的数组,并且递归调用归并操作。
*
* 归并排序优点和缺点:比简单排序在速度上快很多;归并排序会占用双倍的存储空间。
*
* 归并排序的效率:归并排序的时间复杂度是 O(N*LogN);简单排序的复杂度是O(N2)。
阅读全文
摘要:
递归的效率:调用一个方法会有一定的代价和开销。首先,控制必须须从当前位置转移到调用
* 方法的开始处。其次,传给这个方法的参数以及这个方法返回地址都要初压到一
* 个栈里,为的是方法能够访问参数以及知道返回值在存储在哪里,这个过程也称
* "保存现场"。递归方法的使用的本质是从概念上简化了问题,而不是因为它更有
* 效率。当使用递归的效率很低的时候,就可以考虑如果把递归转化成非递归。
阅读全文