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

求实现:重复减去数字反射值直至归零的Python代码

实现「减去自身反射值」的收敛验证逻辑

循环实现方案

循环是更稳妥的选择,能避免递归深度过大导致的栈溢出问题。结合你提供的反射值函数,完整验证代码如下:

def r(n):
    r = 0
    while n > 0:
        r *= 10
        r += n % 10
        n //= 10
    return r

def verify_convergence(num):
    current = abs(num)
    seen = set()
    print(f"初始值: {num}")
    while current != 0:
        if current in seen:
            print(f"检测到循环,无法收敛至0,当前数: {current}")
            return False
        seen.add(current)
        reflected = r(current)
        diff = current - reflected
        print(f"{current} - {reflected} = {diff}")
        current = abs(diff)
    print("最终收敛至0")
    return True

# 测试示例中的275
verify_convergence(275)

代码说明

  • 取绝对值abs(num):减法结果可能为负数,但负数的反射值与绝对值的反射值一致,简化后续计算
  • seen集合:记录已出现的数值,避免进入无限循环(若数值重复出现,说明无法收敛到0)
  • 每一步打印计算过程,方便跟踪验证流程

递归实现方案

如果偏好递归写法,也可以实现,但需注意Python默认递归深度限制(约1000层),大数测试建议用循环版本:

def r(n):
    r = 0
    while n > 0:
        r *= 10
        r += n % 10
        n //= 10
    return r

def verify_convergence_recursive(num, seen=None):
    current = abs(num)
    if seen is None:
        seen = set()
        print(f"初始值: {num}")
    if current == 0:
        print("最终收敛至0")
        return True
    if current in seen:
        print(f"检测到循环,无法收敛至0,当前数: {current}")
        return False
    seen.add(current)
    reflected = r(current)
    diff = current - reflected
    print(f"{current} - {reflected} = {diff}")
    return verify_convergence_recursive(diff, seen)

# 测试示例中的275
verify_convergence_recursive(275)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 23:03:24