如何找到以下代码的时间复杂度?

时间:2016-11-29 15:54:59

标签: time-complexity complexity-theory

你能解释一下如何找到下面代码的时间复杂度吗?任何帮助表示赞赏。

int boo(n) {
    if (n > 0)
    {
         return 1 + boo(n/2) + boo(n/2);
    }
    else 
    {
         return 0;
    }
}

1 个答案:

答案 0 :(得分:1)

enter image description here

有时候把它写下来是件好事。当你开始时,它总和1 + boo(n / 2)+ boo(n / 2),它在第二行。

并且每个n / 2也都运行

等。等

所以最后,虽然呼叫次数正在以指数方式增长,但重复的次数只是追溯性的,最后会相互删除而你得到了O(N)。

PS:它足以倒数最后一行,整个树总是只有一次更多的节点(减一),这在复杂性理论中是可以忽略的(你不关心常数,它乘以2是)< / p>