解决递归求阶乘问题时间复杂度计算 | 您所在的位置:网站首页 › 用递归法计算n! › 解决递归求阶乘问题时间复杂度计算 |
本问题源于《算法设计分析》,仔细并分析了阶乘问题时间复杂度计算。并为未来设计更好的算法,观测其时间复杂度打下良好的基础。 问题来源求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),n≤1T(n−1)+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(n−1)+O(1) =T(n−2)+2O(1) =...=T(1)+(n−1)O(1) =O(1)+(n−1)O(1)=O(n) 因此结果时间复杂度为O(n) |
CopyRight 2018-2019 实验室设备网 版权所有 |