其实求时间复杂度的方法就是找出执行得最多的语句然后判断其量级罢了,只是有时候不太容易直接看出来,所以需要用假设的方式辅助辅助
for(int i=0;i<n;i=i*3)
cout<<"hehe"<<endl;
如上这段代码,执行最频繁者不过是那句输出语句罢了,执行了多少次呢?我们按以下方法推演便知:
执行次数 i的值
1 3
2 3**2
3 3**3
.... ....
k 3**k
假设执行到k次的时候结束,结束条件是3**k大于等于n了,方便计算,我们取等于既是:3**k=n。k就是我们要求的时间复杂度!
由此我们可以推出,上述例子的时间复杂度为log3n。
那么有时候是递归的函数怎么解?如下例子
void f(int n){
if(n==0) return;
else return f(n/3);
}
其实和上面的例子一样,我们也是按照递