我在期中遇到了这个问题,我不确定我的答案是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);}
最佳答案
首先,我将您的代码加上另一个缩进
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);
}
首先要说的是,每次
recursiveFun1()
被称为O(n)
都要归功于for
。尽管每次调用n
都会减少,但是时间仍然受O(n)
限制。第二件事是计算
recursiveFun1()
会被调用多少次。显然(对我来说)它将被精确地称为n + 1
次,直到参数n
达到零值为止。所以时间是
n + (n-1) + (n - 2) + ... + 1 + 0
这是((n+1)n)/2
这是O(n^2)
。关于c++ - 确定函数的复杂度(大O符号),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33656996/