这种递归算法的时间复杂度是多少?

时间:2018-03-06 11:28:43

标签: algorithm recursion time-complexity big-o

int func3(int n){
  if (n <= 1) return n;
  return func3(n - 1) + func3(n - 1);}

我的想法是:在每次递归中我们都有一个加法运算。每当我们将递归分成两个时,我们就会执行此操作。所以我不确定是否应该将其称为O(N2^N)O(2^N)。我认为O(N2^N)更有意义,因为我们将问题分成2 ^ N个并将它们分开添加。尽管我不确定。那么有人可以通过展示他们的步骤来指导我吗?

2 个答案:

答案 0 :(得分:2)

您可以将函数的调用绘制为二叉树:

    func3
     /\
 func3 func3
.............

您的二叉树中将有n个节点级别,每个级别next_level_node_count = perv_level_node_count * 2

这是一个几何级数。

答案 1 :(得分:1)

另一种方法是形成函数的递推方程并求解。给定的函数可以表示为

T(1) = O(1)
T(n) = 2 * T(n-1)

当您将重复扩展如下时,我们得到 T(n)= 2 ^ n

T(n) = 2 * { 2 * T(n-2) } = 2^2 * T(n-2)
   = 2^3 * T(n-3)
   = 2^(n-1) * T(n-(n-1))
   = 2^(n-1) * O(1)
   = 2^(n-1)
   = 2^n

希望它有所帮助!