簡體   English   中英

簡單循環時間復雜度內的遞歸函數

[英]Recursive function inside a simple loop time complexity

為什么在for循環內調用遞歸函數會導致時間復雜度為O(2 ^ N)而不是下面這段代碼的O(N 2 ^ N) 基於《 CTCI》一書。

void allFib(int n){
    for (int i = 0; i < n; i++) {
        System.out.println(i + ":  "+  fib(i)); 
    }
}

int fib(n){
    if  (n  <=  0)  return 0;
    else if  (n  ==  1)  return 1; 
    return fib(n - 1)  +  fib(n -2);
}

將遞歸函數視為在樹中計算值。

        fib(n)
         /\
        /  \
 fib(n-1)   fib(n-2)

如果仔細查看n = 2 ,將要計算3值,即2^(1+1) - 1 = 3 ,其中1是樹的高度,如2^(h+1)-1

對於n = 3 ,高度為h = 2

對於n = 4 ,高度為h = 3

對於所有n ,您需要添加所有這些: 2^2 - 1 + 2^3 - 1 + 2^4 - 1 + ....2^n - 1 >約為2^(n+1)

因此,您得到O(2^n)

暫無
暫無

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

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