![](/img/trans.png)
[英]Determining Time Complexity of a Recursive Function Calling From inside a Loop
[英]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.