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

Python递归函数无法正确统计数字中零的个数问题求助

问题分析与修复

你的代码存在两个核心问题:

  1. 整数不可变导致的参数传递失效
    Python中整数属于不可变类型,递归调用时传递的ans是值的副本。每次执行ans +=1时,只是创建了一个新的整数对象,并不会修改上层函数中ans的原始值。最后返回的始终是最初传入的0,自然得不到正确统计结果。

  2. 终止条件的统计漏洞
    原代码的终止条件if x //10 == 0: return会在x是个位数时直接返回,完全未判断这个个位数是否为0。如果输入数字的最后一位是0(比如2000),这最后一个0就会被漏掉统计。


修复方案

方案一:让递归函数返回统计值(推荐)

无需传递ans参数,让每一层递归返回当前位的统计结果,再与下层递归的结果累加:

def count_zeros_recursive(x):
    if x == 0:
        return 0
    # 统计当前位是否为0
    current_count = 1 if x % 10 == 0 else 0
    # 累加下层递归的统计结果
    return current_count + count_zeros_recursive(x // 10)

# 单独处理输入为0的特殊情况(0本身包含1个0)
def count_zeros(num):
    return 1 if num == 0 else count_zeros_recursive(num)

print(count_zeros(2002))  # 输出2

方案二:使用可变对象传递统计值

利用列表(可变类型)传递统计结果,修改列表内的元素会直接影响原对象:

def re(x, ans):
    if x == 0:
        return
    rem = x % 10
    if rem == 0:
        ans[0] += 1
    re(x // 10, ans)

ans = [0]
re(2002, ans)
print(ans[0])  # 输出2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:06:01