如何实现移除数字所有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
相关产品推荐
相关产品推荐

