You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

对数复杂度疑问:算法教材标注循环复杂度为O(log₂n)是否为笔误?

结论

你对这段代码的判断完全正确,它确实是死循环,不存在有限的时间复杂度,习题标注的O(log₂n)是错误的,大概率是书籍印刷/编写时的笔误。

为什么这段代码是死循环

  • 代码中i的初始值为0,for循环的增量表达式为i * 2:0乘以2的结果永远是0,且该表达式没有对i做赋值操作,i的值会一直保持为0,只要n>0,i < n的判断永远为真,循环永远不会终止。
  • 你将它和while(true)的死循环对比是完全合理的,两者都没有可触发的循环终止条件,逻辑完全一致。

原习题的正确考察意图

结合标注的O(log₂n)时间复杂度,原习题的代码存在两处笔误:

  1. i的初始值应为1而非0
  2. 增量表达式应为赋值操作i *= 2而非单纯的乘法运算i * 2

修正后的代码如下:

function someFunc(n) {
    // 初始值设为1,增量改为赋值操作
    for(var i = 1; i < n; i *= 2) {
        console.log(i);
    }
}

修正后,i的取值会按1、2、4、8、16…的指数级增长,直到不满足i < n的条件,循环执行次数为⌊log₂n⌋次,时间复杂度为O(log₂n),这才是习题原本想要考察的对数复杂度知识点。

额外提示

技术书籍出现少量笔误是常见情况,你能精准识别出死循环的问题,说明你对循环执行逻辑的掌握是扎实的,不需要怀疑自己的判断。


内容的提问来源于stack exchange,提问作者user16373392

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:15:06