递归算法:就是一种直接或间接调用自身的算法。实现过程:通过函数或者子过程来完成,在函数或者子过程中编写代码直接或间接的调用自己,即可完成递归操作。(相同类别的问题,把问题层层转换为规模缩小的子问题到最小问题有已知条件,然后来求解,然后得到结果逐级返回。其实也是一种循环。)...
分类:
编程语言 时间:
2014-11-06 09:22:53
阅读次数:
232
public class T { //反转字符串 public static String reverseString(String s){ if(s.isEmpty()) return s; return reverseString(s.substring(...
分类:
编程语言 时间:
2014-11-06 09:15:31
阅读次数:
169
mooc的作业本来以为是很简单,真正写下去才知道不简单。每个都略有技巧,细细琢磨#include #include int all, top;class TreeNode{ public: int value; TreeNode* left; Tree...
分类:
编程语言 时间:
2014-11-02 19:30:26
阅读次数:
276
C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。 许多教科书都把计算机阶乘和菲波那契数列用来说明递归,非常不幸我们可爱的著名的老潭老师的《C语言程序设计》一书中就是从阶乘的计算开始的函数递归。导致读过这本经书的同学们,看到阶乘计算第一个想法就是递归。但是在阶乘的计算里,递归...
分类:
编程语言 时间:
2014-11-01 20:26:47
阅读次数:
282
递归算法: /**
* 求排列(递归)
* @param result 最终排列结果
* @param out 已经排列内容
* @param target 需要排列的数据集合
* @param m 排列元素个数
*
* 待解决:1 大数据 溢出 () 2 ...
分类:
其他好文 时间:
2014-10-30 13:40:03
阅读次数:
176
在算法分析中,当一个算法中包括递归调用时,其时间复杂度的分析会转化为一个递归方程求解。实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而足,比較经常使用的有下面四种方法: (1)代入法(Substitution Method) 代入法的基本步骤是先猜測递归方程....
分类:
编程语言 时间:
2014-10-30 13:28:01
阅读次数:
214
前段时间刚看完c++语法部分的内容,现在开始着手研究下,用c++实现下一些基本的排序算法。
因为是初学者的缘故,可能理解之处还是存在不到位之处,但权且当作学习过程中的一种心得体会,也算记录下自己学习的路程吧。(理解的浅陋之处望及时指出)
递归算法浅析,主要列举了阶乘以及Fibonacc...
分类:
其他好文 时间:
2014-10-29 23:41:16
阅读次数:
328
三种不同的遍历方式区别在于栈空间的释放时机和输出结点信息时机的不同:先序和中序遍历是在访问栈顶元素的右孩子(右子树)之前退栈,而后序遍历在访问右子树之后退栈;先序遍历是在某结点入栈时输出其信息,而中序和后序遍历是在该结点退栈时输出其信息。
无论是递归算法还是非递归算法,都遵循上述规则,二者可以一一对应。图示如下:...
分类:
编程语言 时间:
2014-10-29 17:16:11
阅读次数:
294
以下是时间对比,第二张图是使用得递归算法,第一张图使用的栈,使用栈来实现还是要快那么一点。使用递归的程序请参考我昨天的博客。 using System; using System.Collections.Generic; using System.Linq; using...
分类:
编程语言 时间:
2014-10-29 13:16:17
阅读次数:
234
递归优化
很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer)。但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError。处理这个问题,我们可以使用一种叫做尾调用(Tail-Call Optimization)的技术来对递归进行优化。同时,还可以通过暂存子问题的结果来避免对子问题的重复求解,这个优化方法叫做备忘录(Memoizatio...
分类:
编程语言 时间:
2014-10-29 10:54:45
阅读次数:
395