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

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

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

最佳答案
《时间复杂度 – 如何找到以下代码的时间复杂度?》

有时把它写下来是好的.当你开始时,它总和1 boo(n / 2)boo(n / 2),它在第二行.

并且每个n / 2也运行

等等

所以最后,虽然呼叫次数正在以指数方式增长,但重复次数只是logharitmic,最后相互删除,你得到了O(N).

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

点赞