以for写时间复杂度log的例子出现的问题

public class L1_logN {

    public static void main(String[] args) {

          logN(5);
    }


    private static void logN(int n){

        int count=0;  // 循环次数
        for(int i=1;i<=n;i*=2){
            count++;
        }

        System.out.format("当n=%d时,循环了 %d 次\n",n,count);

    }

}


**结果: **

n=1时,循环了 1 次
当n=2时,循环了 2 次
当n=100时,循环了 7 次

问题:
当n=1时, log2(1)不是等于0吗?
当n=2时, log2(2)不是等于1吗?

为什么上面的结果却不符,还是理解有误?

  • 当n = 1时, log2(1) 等于0,但是结果却为1
  • 当n = 2时, log2(2) 等于1,但是结果却为2
  • 当n = 4时, log2(4) 等于2,但是结果却为3
  • 当n = 8时, log2(8) 等于3,但是结果却为4
    ...

所以你这里 i<=n 需要改为 i<n

建议加点log,这是个屡试不爽的好方法!

i<=n 改为 i<n