解决递归求阶乘问题时间复杂度计算 您所在的位置:网站首页 用递归法计算n! 解决递归求阶乘问题时间复杂度计算

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

#解决递归求阶乘问题时间复杂度计算| 来源: 网络整理| 查看: 265

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

问题来源

求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 实验室设备网 版权所有