以下代码的时间复杂度是多少?
我猜:
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);
}
答案 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)。