递归算法的时间复杂度分析
例子:求N!。 这是一个简单的"累乘"问题,用递归算法也能解决。
n! = n * (n - 1)! n > 1
0! = 1, 1! = 1 n = 0,1
因此,递归算法如下:
fact(intn) {
if(n== 0 || n == 1)
return1;
else
returnn * fact(n - 1);
}
以n=3为例,看运行过程如下:
fact(3) ----- fact(2) ----- fact(1) ------fact(2) -----fact(3)
------------------------------> ------------------------------>
递归 回溯
递归算法在运行中不断调用自身降低规模的过程,当规模降为1,即递归到fact(1)时,满足停止条件停止递归,开始回溯(返回调用算法)并计算,从fact(1)=1计算返回到fact(2);计算2*fact(1)=2返回到fact(3);计算3*fact(2)=6,结束递归。
递归算法的分析方法比较多,最常用的便是迭代法。
迭代法的基本步骤是先将递归算法简化为对应的递归方程,然后通过反复迭代,将递归方程的右端变换成一个级数,最后求级数的和,再估计和的渐进阶。

本文探讨了递归算法的时间复杂度分析,通过实例详细解释了如何利用迭代法分析递归方程,展示了不同递归形式的时间复杂度,包括线性、线性对数等,并介绍了递归树在分析过程中的作用。

437

被折叠的 条评论
为什么被折叠?



