此递归代码的运行时是什么?

时间:2018-08-29 14:51:24

标签: recursion big-o

我想知道以下递归函数的运行时是什么:

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

如果将其视为调用树,则每个节点将具有2个分支。该调用树中的节点数将为2 ^ +2¹+2²+2³+ ... + 2 ^ n,相当于2 ^(n + 1)-1。因此,此函数的时间复杂度应为O( 2 ^(n + 1)-1)假设每个通话的时间均为O(1)-我对吗?根据我有此示例的书,时间复杂度为O(2 ^ n)。我很困惑-我想念什么?

1 个答案:

答案 0 :(得分:1)

Big-O表示法忽略常量因子和低阶项。所以O(2 ^(n + 1)-1)等于O(2 ^ n)。

O(2^(n+1)-1) = O(2^n * 2^1 - 1)

我们先减去2 ^ 1的常数因子,然后随着2 ^ n渐近地增长而降低低阶项-1。