최근에 나는이 질문이있는 시험을 보았습니다. g의 시간 복잡도는 얼마입니까?이 코드 조각의 Big-O는 무엇입니까?
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);
}
이제 명확 F와 아무것도 2 * n을 호출이 있기 때문에 저와 제 친구들의 대부분은 O (n)을 대답하지만, 교수의 대답은 (n은^2) O했다. 누가 나에게 맞는지 설명 할 수 있습니까? 그 사람이라면 이유를 설명해 주시겠습니까?
작성된대로 O (n)이고 분석 결과가 정확합니다. 문제를 잘못 교정하지 않았습니까? 내부 호출은'f (arr, m, m-1)'입니까? 필자는 내부 호출'f (arr, n, m-1)'에서'n '을 참조하는 것은별로 의미가 없다. 왜냐하면'n'이 항상 0이기 때문이다. –
나는 그것을 매우 조심스럽게 검사했고 n이고 m이 아닙니다. 나는 그 교수가 실제로 그것을 m라고 오인하고 O (n^2)라고 말한 것으로 생각합니다. – nononoha
'O (n * m)'그러나 함수 호출은'n == m'이므로'O (n^2)'입니다. –