我想知道以下递归函数的运行时是什么:
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)。我很困惑-我想念什么?
答案 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。