Python递归函数无法正确统计数字中零的个数问题求助
问题分析与修复
你的代码存在两个核心问题:
整数不可变导致的参数传递失效
Python中整数属于不可变类型,递归调用时传递的ans是值的副本。每次执行ans +=1时,只是创建了一个新的整数对象,并不会修改上层函数中ans的原始值。最后返回的始终是最初传入的0,自然得不到正确统计结果。终止条件的统计漏洞
原代码的终止条件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
相关产品推荐
相关产品推荐

