C ++时间复杂度用for循环表示递归函数

时间:2015-01-24 22:20:24

标签: recursion time complexity-theory

Oh-Notation中以下函数的时间复杂度是多少?

void fun(int n)
{
if (n <= 1)
  return;
fun(n − 1);
for (int i = 0; i < n; i++)
  cout << " * ";
}

我认为它是O(n),但我可能错了

2 个答案:

答案 0 :(得分:0)

它是O(n^2),因为增加n会导致增加for次调用的次数,以及每个for循环所需的时间 - 完成

两个变化均线性上升,产生公式O(n) * O(n) = O(n^2)

答案 1 :(得分:0)

没有递归就是O(n)。 考虑这个调用堆栈的乐趣(3):

fun(3): 
    fun(2):
       fun(1):
            return;
    cout " * * "
cout " * * * "