最近我参加了一个考试,问题是:g的时间复杂度是多少?
int f(int *arr, int n, int m)
{
if(n == 0)
{
if(m == 0)
return 3;
return arr[m] + f(arr, n, m - 1);
}
return f(arr, n - 1, m);
}
int g(int *arr, int n)
{
return f(arr, n, n);
}
现在,我和我的大多数朋友都回答了O(n),因为有明显的2 * n要求f而没有别的,但教授的回答是O(n ^ 2)。 谁能向我解释谁是对的?如果是他,你能解释一下原因吗?
答案 0 :(得分:2)
修改强>
在帖子中,我意识到我正在解决错误的问题。当内部函数调用是f(arr, m, m - 1)
时,我正在解决。在这种情况下,时间复杂度确实是O(n²)。问题的发布方式,时间复杂度为O(n)。但是,我会留下这篇文章,因为这很可能是教授误以为的方式。因此,以下答案是以考试问题可能参考的方式编写的。
考虑采取的步骤: