最近、私はこの質問があったという試験を受けました: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);
}
は今、2 *は明らかに存在しているとして、私と私の友人のほとんどは、O(n)を答えN F個と他には何のために呼び出しますが、教授の答えはO(N^2)でした。 誰かが私に正しい人を説明することはできますか?それが彼なら、理由を説明できますか?
これはO(n)と書かれており、あなたの分析は正しいです。あなたは問題を誤って書き換えていないと確信しています。内側の呼び出しは 'f(arr、m、m-1)'です。書かれているように、内部呼び出し 'f(arr、n、m-1)'の 'n'は常に0なので、' n 'を参照するのはあまり意味がありません。 –
nでありmではない。私は教授が実際にそれをmと間違えて、O(n^2)と言っていたと思う。 – nononoha
'O(n * m)'ですが、関数呼び出しは 'n == m'なので' O(n^2) 'です。 –