簡體   English   中英

遞歸 function 的時間復雜度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM