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

时间:2016-08-20 01:59:26

标签: data-structures time-complexity

以下代码的时间复杂度是多少?

我猜:

for循环运行恒定时间,即3.并且该函数用n / 3调用自身。所以' n'每次收缩3次,时间复杂度为O(log 3 N)?

void function(int n){
    if(n == 1)
        return 1;
    for(int i = 0; i < 3; i++){
        cout << "Hello";
    }
    function(n/3);
}

1 个答案:

答案 0 :(得分:2)

是的,它是O(log 3 N)。调用循环C完成的工作量。前几个调用将进行:

f(n) = C + f(n/3) = C + C + f(n/9) = C + ... + C + f(1)

C出现的次数将是在n变为1之前将n除以3的次数,这正好是log 3 n。因此,总工作量为C * log 3 n或O(log 3 N)。