C++ 确定函数的复杂性(大O表示法)

C++ 确定函数的复杂性(大O表示法),c++,recursion,big-o,C++,Recursion,Big O,我在期中考试时遇到了这个问题,我不确定我的答案,答案是O(n^2)。我想要有解释的答案,谢谢 int recursiveFun1(int n) { for(i=0;i<n;i+=1) do something; if (n <= 0) return 1; else return 1 + recursiveFun1(n

我在期中考试时遇到了这个问题,我不确定我的答案,答案是O(n^2)。我想要有解释的答案,谢谢

int recursiveFun1(int n)
{  for(i=0;i<n;i+=1) 
      do something;                                                                 
    if (n <= 0)
    return 1;
else
    return 1 + recursiveFun1(n-1);}
intrecursivefun1(intn)
{对于(i=0;i用
R(n)
表示该递归函数对输入
n
的执行时间。然后,如果
n
大于0,则执行以下操作:

  • n
    times
    做某事
    -假设“某物”的运行时间恒定,它会消耗
    c1*n
    时间
  • 各种检查和记账工作-固定时间
    c2
  • 计算输入
    n-1
    -一次。其运行时间为
    R(n-1)
    (根据定义)
所以

这个方程有一个解,它是
O(n^2)
。你可以通过归纳法来证明它,或者仅仅通过猜测
a*n^2+b*n+c
形式的解来证明它


注意:我假设“做某事”有恒定的运行时间。这似乎是合理的。但是,如果它不是真的(例如,它包含一个递归调用),那么您的复杂性将更大-可能更大,这取决于“某事”在做什么。

首先,我将代码放入另一个缩进

int recursiveFun1(int n)
{  
  for(i=0;i<n;i+=1) // this is bounded by O(n)
    do something; // I assume this part is O(1)

  if (n <= 0)
    return 1;
  else
    return 1 + recursiveFun1(n-1);
}
intrecursivefun1(intn)
{  

对于(i=0,InPopy,首先你的方法)和“我想要答案解释”听起来很粗鲁。注意你的语言。你的标题是“大O”,但是在你的文本中,你使用的是一个小写的“O”。注意,请精确。此外, > do/Cuth>是C++中引入一个循环的一个关键词。如果你写了“代码> dothOnththin”,那就更清楚了。
相反。令人印象深刻的是,你甚至懒得合理地格式化代码。答案是O(n^2),除非
do something
中的
something
不是O(1)。这个递归让我想起了双嵌套for循环,无论如何,你可以验证它确实是O(n^2)通过绘制递归树,或者你可以说这个函数做线性工作,它被调用了n次,这导致了o(n^2)。很好的答案,向上投票。
int recursiveFun1(int n)
{  
  for(i=0;i<n;i+=1) // this is bounded by O(n)
    do something; // I assume this part is O(1)

  if (n <= 0)
    return 1;
  else
    return 1 + recursiveFun1(n-1);
}