我有一些麻煩弄清楚下面代碼的最壞時間複雜度。
(這不是一門功課,看https://leetcode.com/problems/integer-replacement/description/。)if if遞歸最壞時間複雜度
int recursion (int n) {
if (n == 1)
return 0;
if (n % 2 == 0) {
return recursion(n/2) + 1
} else {
return min(recursion(n/2 + 1) + 1, recursion(n - 1)) + 1;
}
}
我唯一知道的是,當N == 2^k(k > 0)
,最壞的時間複雜度爲O(logN)
。 但是,我不清楚何時N
不是2^k
。因爲即使number/2
仍然可以得到奇數。有人說它仍然是O(LogN)
,但我不相信。
我知道代碼不是最好的解決方案,只是想分析時間複雜性。我試過遞歸樹和聚合分析,似乎沒有幫助。
你的其他情況有錯誤的說法,它應該是'(n + 1)/ 2' –
@BlackMamba。嗨,(n + 1)會溢出。但我有其他錯誤。 Updated.Thanks非常多 – nathan
我看到了leetcode問題陳述。我不知道在前兩個版本中,最後一個分支(用'min'選擇其中一個)與它有關 - 它不應該是「an'else」的一部分,如果「then」無論如何,''終止於無條件的'return'。 – greybeard