繁体   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