将以下递归算法的时间复杂度 T(n) 表示为递归方程:

Posted

技术标签:

【中文标题】将以下递归算法的时间复杂度 T(n) 表示为递归方程:【英文标题】:Represent the time complexity of the following recursive algorithm, T(n), as a recurrence equation: 【发布时间】:2015-04-30 05:05:59 【问题描述】:

我正在尝试找出以下算法的时间复杂度:

int pow_17(int n) 

    if(n==1) 
       return 17;
    if(n>1) 
       return(17 * pow_17(n-1);

到目前为止,这就是我所拥有的:

T(n) = c1 + c2 + c3*log17n+1 + c4*17(n-1)

我知道这是不正确的,但有人可以解释一下如何解决这个问题吗?任何帮助深表感谢!!谢谢!

【问题讨论】:

输出不会只是17^n吗?这种重复出现n 次,如果n > 1,我们只需继续调用pow_17 并将n 减1,直到n == 1,并且在每次递归调用时,我们乘以17。 你到底是从哪里得到对数词的? 是的,输出就是这样。但是循环到达那里需要多长时间?还是 17^n @Adam LOL 我不知道... 如果它递归 n 次,那么复杂度是 O(n)。看起来有人已经告诉过你了! 【参考方案1】:
T(n) = T(n-1) + c

T(1) = c
T(2) = c+c=2c
T(3) = 2c +c=3c
 ....
T(n) = nc

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

【讨论】:

以上是关于将以下递归算法的时间复杂度 T(n) 表示为递归方程:的主要内容,如果未能解决你的问题,请参考以下文章

具有三个递归调用的递归函数的时间复杂度

算法复杂度,求解递归方程

递归树

以下递归算法的时间复杂度是多少?

算法分析| 系列4(解决递推)

递归的空间复杂度