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

判断数值是否为指定底数幂的递归函数实现是否正确?

判断给定数值是否为指定底数幂的递归函数正确性判定

你给出的实现代码如下:

def sum_factor(num,base):
  
    while num>=base:
        if num==base:
            return "Yes"
    num=num/base
    sum_factor(num/base,base)
    return "Nope"

print(sum_factor(12,2))

结论

这个实现存在多处严重错误,完全无法实现预期功能,运行测试用例sum_factor(12,2)时会直接触发死循环,根本不会返回任何结果。

具体错误点

  • 死循环问题:while num>=base的循环体内没有任何修改num值的逻辑,只要传入的num大于base且不等于base,就会永远卡在循环判断里,永远走不到循环外的除法、递归逻辑。比如测试用例里12大于2,且不等于2,循环会无限判断12>=2、12==2?否,直接卡死。
  • 递归返回值丢失:就算修复了死循环问题,代码里调用sum_factor(num/base,base)时没有接收、返回递归调用的结果,无论深层递归判断出是幂返回了"Yes",外层函数都会忽略这个结果,最终直接走到return "Nope"的逻辑,判断完全失效。
  • 除法精度隐患:代码中用/做除法在Python3中会生成浮点数,连续多次浮点运算很容易出现精度误差,比如本该整除的数值计算后出现微小的小数尾差,会导致相等判断出错。判断整数幂场景应该先校验取模结果,再用整数整除做数值缩放。
  • 边界场景缺失:代码完全没有处理边界情况:比如任意非0底数的0次幂为1的场景、底数为0/1/负数的非法输入场景,传入这类参数时要么判断错误要么直接死循环。

修正后的参考实现

def is_power(num, base):
    # 非法输入拦截:仅考虑正整数幂场景,底数需大于1,数值需为正整数
    if base <= 1 or num <= 0:
        return "Nope"
    # 如需支持0次幂判断(任意底数的0次幂为1),放开下方注释即可
    # if num == 1:
    #     return "Yes"
    # 终止条件:数值等于底数,匹配幂的结果
    if num == base:
        return "Yes"
    # 无法整除说明不可能是对应底数的幂
    if num % base != 0:
        return "Nope"
    # 必须return递归调用的结果,不能丢弃返回值
    return is_power(num // base, base)


print(is_power(12, 2))  # 输出 Nope,12不是2的整数次幂
print(is_power(8, 2))   # 输出 Yes,8=2^3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:42:29