簡體   English   中英

此相互遞歸代碼的時間復雜度

[英]Time complexity of this mutual recursive code

我在Java中有這個相互遞歸的代碼,我想知道這段代碼的時間復雜度是多少。 我的猜測是O(2 ^ n),因為對於G方法,每次調用時return(n-1)+ G(n-1)都會分成2個,或者這部分是O(n)嗎? 我對此不確定。

public static int F(int n)
{
    if (n <= 1)
        return 1;
    else if (n % 2 == 0)
        return n + F(n/2);
    else
        return G(n-1)-n;
}

public static int G(int n)
{
    if(n <= 1)
        return 1;
    else if (n % 2 == 0)
        return F(n-1) + G(n-1);
    else
        return F(n-3);
}

您可以用F重寫G。

public static int G(int n) {
    if(n <= 1)
        return 1;
    else if(n % 2 == 0)
        return F(n-1) + F(n-4);
    else
        return F(n-3);
}

這使您可以根據F重寫F。

public static int F(int n) {
    if(n <= 1)
        return 1;
    else if(n % 2 == 0)
        return n + F(n/2);
    else
        return F(n-2) + F(n-5);
}

當n%2 == 0時,結果為O(n):O(F(n))為log(n),這意味着當n%2!= 0時,O(F(n))為O (n)+ O(log(n)),或簡單地為O(n)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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