[英]Time-Complexity of recursive function
我在確定這個遞歸 function 在 Big-O 表示法方面的時間復雜度時遇到了一些麻煩。
double expRecursive(double x, int n) {
if (n <= 4) {
return expIterativ(x, n);
}
return expRecursive(x, n/2) *
expRecursive(x, (n + 1)/2);
}
(expIterative方法的時間復雜度是O(n))
expRecursive()的遞歸關系是T(n) = 2T(n/2) + n嗎?
如果是這種情況,我想在應用主定理之后 T(n) = O(nlogn)?
我最大的問題是提出正確的遞歸關系......
要獲得遞歸關系,首先注釋代碼會有所幫助:
double expRecursive(double x, int n) {
if (n <= 4) {
return expIterativ(x, n); // O(1) since n is bounded
}
return expRecursive(x, n/2) // T(n/2)
* // O(1)
expRecursive(x, (n + 1)/2); // T(n/2)
}
所以遞歸關系是
T(n) = O(1), for 0 <= n <= 4
T(n) = 2 * T(n/2) + O(1), for n > 4
有解T(n) ∈ Ө(n)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.