Python统计整数偶数位数的递归函数返回值异常问题
递归统计偶数位数函数的问题排查与修复
你的函数每次返回1的核心原因是使用了普通除法 /——在Python中该操作会返回浮点数,而非整数。比如输入24,第一次递归调用evendigits(24/10)实际传入的是2.4,这个浮点数在后续递归中无法正确判断各位数字的奇偶性,最终导致统计结果错误。
修复后的代码
def evendigits(n): # 处理负数输入,取绝对值不影响位数奇偶判断 n = abs(n) if n < 10: return 1 if n % 2 == 0 else 0 # 用整数除法//替代普通除法/,确保递归传入整数 if n % 2 == 0: return 1 + evendigits(n // 10) else: return evendigits(n // 10)
关键修复点
- 替换
n/10为n//10:整数除法会直接丢弃小数部分,保证每次递归处理的都是原数的高位整数,比如24//10得到2,而非2.4,这样后续的奇偶判断才能针对真实数字生效。 - 新增
n = abs(n):兼容负数输入场景,避免负浮点数干扰递归逻辑。
测试示例:
evendigits(1234)返回2(数字2、4为偶数)evendigits(2468)返回4(所有位数均为偶数)
内容的提问来源于stack exchange,提问作者codedummy
相关产品推荐
相关产品推荐

