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

如何实现移除数字所有0的递归Reduce函数?代码卡壳求助

递归实现Reduce函数移除数字中的0

你当前代码的问题是混了循环和递归逻辑,既没写递归终止条件,非零数字的拼接逻辑也没完成,还没处理负数的情况。下面是修正后的完整递归实现:

完整代码

def Reduce(num):
    # 先处理负数:记好符号,转成正数来处理
    sign = -1 if num < 0 else 1
    num = abs(num)
    
    # 递归终止条件:数字拆完了就返回0
    if num == 0:
        return 0
    
    last_digit = num % 10
    # 最后一位是0的话,直接递归处理去掉最后一位的数字
    if last_digit == 0:
        return Reduce(num // 10)
    # 最后一位非0,把当前位拼到递归结果后面(乘10是把之前的结果升一位)
    else:
        # 只剩最后一位的时候直接返回,避免多乘10
        return last_digit + 10 * Reduce(num // 10) * sign if num // 10 != 0 else last_digit * sign

关键逻辑说明

  • 负数处理:先把数字的符号存下来,转成绝对值处理,最后再把符号乘回去,保证负数输出正确。
  • 递归终止:当数字被拆到0的时候,就停止递归,返回0。
  • 数字拼接:递归是从最后一位开始处理的,所以每次拿到非零的最后一位,要把之前递归得到的结果乘10(相当于往左挪一位),再加上当前位,这样就能拼出正确的数字。
  • 边界情况:如果只剩最后一位非零数字,直接返回该数字乘符号,不然会多乘10导致结果错误。

测试验证

运行下面的测试代码:

print(Reduce(-160760))  # 输出 -1676
print(Reduce(1020034000))  # 输出 1234
print(Reduce(0))  # 输出 0
print(Reduce(500))  # 输出 5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:06:34