最近我參加了一個考試,其中有一個問題: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),因爲有明確的f和別的2 * N個電話,但教授的答案是爲O(n^2)。 有人可以向我解釋誰是對的?如果是他,你能解釋一下爲什麼?
這是寫的O(n),你的分析是正確的。你確定你沒有錯誤地記錄問題,而內部調用是'f(arr,m,m-1)'?正如所寫,在內部調用'f(arr,n,m-1)'中引用'n'沒什麼意義,因爲那時'n'總是0. –
我仔細檢查過它,它是n而不是m。我懷疑這位教授實際上把它誤認爲是O,因此就說O(n^2)。 – nononoha
'O(n * m)'但是函數調用是'n == m',所以它的'O(n^2)'。 –