计算递归函数的时间复杂度

Posted

技术标签:

【中文标题】计算递归函数的时间复杂度【英文标题】:calculating time complexity of recursive functions 【发布时间】:2022-01-04 17:48:54 【问题描述】:

如何计算 e3 的时间复杂度? 我知道 e3_aux 的复杂度是 O(n),但是 e3 中的 if 语句每 1 到 n 次调用一次。 我知道答案是T(n)=T(n-1)+O(n),有人能解释一下为什么吗?

函数 e3(A[1…n],p):

if ????[????] = 0
   return 0
if ???? = ????
   ????3_????????????(????, 1)
   return ????3(????, 1) + 1
return ????3(????, ???? + 1)

函数 e3_aux(A[1…n],i):

if ???? = ???? + 1
  return
????[????] ← ????[????] − 1
????3_????????????(????, i + 1)

【问题讨论】:

我相信你用最坏的情况来表达,在这种情况下是 n*n,所以 n^2。 【参考方案1】:

T(n-1) 部分意味着您每次调用递归函数时都将原始问题空间减少 1,而 O(n) 意味着在每次递归调用期间,您的函数预计最多做 n 份工作。

【讨论】:

以上是关于计算递归函数的时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章

请问递归算法的时间复杂度如何计算呢?

计算图中路径的递归函数的复杂性

递归函数c ++的复杂性

如何计算以下函数的时间复杂度?

归并排序(递归+非递归)

递归算法时间复杂度分析与改善