解决递归求阶乘问题时间复杂度计算

本问题源于《算法设计分析》,仔细并分析了阶乘问题时间复杂度计算。并为未来设计更好的算法,观测其时间复杂度打下良好的基础。

问题来源

求n!,n是大于或等于0的整数.

递归算法描述

int fac(int n){
	if n == 1 or n == 0{
		return 1;}
	else{
		return n*fac(n-1);
	}
	
}

递归算法时间复杂度计算

在fac算法中,参数n度量问题的规模,计算结果只不过是O(1)的常数时间。整体fac的时间复杂度递推方程如下:
T ( n ) = { O ( 1 ) , n ≤ 1 T ( n − 1 ) + O ( 1 ) , n > 1 T(n)=\left\{ \begin{array}{lcl} O(1),n\le1\\ T(n-1)+O(1),n\gt1\\ \end{array} \right. T(n)={O(1),n1T(n1)+O(1),n>1

采用迭代法递推:
T ( n ) = T ( n − 1 ) + O ( 1 )             = T ( n − 2 ) + 2 O ( 1 )                        = . . . = T ( 1 ) + ( n − 1 ) O ( 1 )                            = O ( 1 ) + ( n − 1 ) O ( 1 ) = O ( n ) T(n)=T(n-1)+O(1)\\ \ \ \ \ \ \ \ \ \ \ \ =T(n-2)+2O(1)\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =...=T(1)+(n-1)O(1)\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =O(1)+(n-1)O(1)=O(n) T(n)=T(n1)+O(1)           =T(n2)+2O(1)                      =...=T(1)+(n1)O(1)                          =O(1)+(n1)O(1)=O(n)

因此结果时间复杂度为O(n)

  • 25
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值