你能解释一下如何找到下面代码的时间复杂度吗?任何帮助赞赏.
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是)