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

代码评审:判断2的幂时引入无限循环的写法是否可接受

问题答复

首先明确:你的代码里的无限循环完全是逻辑bug,不属于任何有意引入无限循环的合理编码实践,这类写法在代码评审中属于严重问题,必须修复,绝对不可接受。

死循环触发原因

问题根源出在两个设计疏漏上:

  1. 使用了Python的真除法/,运算结果会转为浮点数,给逻辑引入了浮点数精度风险
  2. 循环条件设计错误,且没有做输入边界校验
    • 对负整数输入(比如n=-2),Python的取模运算结果和除数同号,当n被除到(-1, 0)区间的负小数时,n % 2的结果永远是正的余数,永远不等于负数n本身,循环会一直执行下去
    • 当传入数值大到浮点数无法精确表示时,反复除以2的过程中可能出现精度丢失,永远达不到循环退出条件
    • 如果你额外加了while n <10:这类逻辑,相当于又叠了一层永远为真的循环条件,自然会卡死

你现在的代码能过给定测试用例纯属巧合:测试用例只覆盖了0、1、8、9这几个非负小整数,刚好没踩中死循环的触发场景。

正确实现参考

判断2的幂不需要绕弯,两种常见正确写法:

  1. 整数循环写法(和常规伪代码逻辑一致)
def is_power_of_two(n):
    if n <= 0:
        return False
    while n % 2 == 0:
        n = n // 2  # 用整数除法,避免浮点数问题
    return n == 1
  1. 位运算写法(时间复杂度O(1),性能最优)
def is_power_of_two(n):
    return n > 0 and (n & (n - 1)) == 0

原理是所有2的幂的二进制表示都只有1位是1,n-1会把这一位变成0,后面所有位变成1,做按位与运算结果刚好为0。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:09:26