内容来自用户:nhz312
如果一个对象部分地62616964757a686964616fe78988e69d8331333433646430由自己组成,或者是按它自已定义的,则称为是递归的。递归不仅在数学中会遇到,在日常生活中也可以遇到。请看下面的图片:
直接或间接地调用自身的算法称为递归算法。
用函数自身给出定义的函数称为递归函数。
在计算机算法设计与分析中,递归技术是十分有用的。使用递归技术往往使函数的定义的算法的描述简洁且易于理解。有些数据结构如二叉树等,由于其本身固有的递归特性,特别适合用递归的形式来描述。另外,还有一些问题,虽然其本身并没有明显的递归结构,但用递归技术来求解使设计出的算法简洁易懂且易于分析。
递归算法一般用于解决三类问题:
(1)数据的定义形式是按递归定义的。这类递归问题往往又可转化成递推算法,递归边界作为递推的边界条件。
比如阶乘的定义:
(式2-1)
又如裴波那契(Fibonacci)数列的定义:
(式2-2)
(2)问题解法按递归算法实现。例如回溯等。
(3)数据的结构形式是按递归定义的。如树的遍历,图的搜索等。
递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。