Python递归函数missing_digits实现返回None,求问题排查
问题分析与代码修正
代码中的错误点
- 外层函数未返回结果:
miss_digits2函数定义了内部递归函数iter,但没有调用它并返回结果,这是直接导致返回None的核心原因。 - 递归终止条件缺失:当
n是个位数(即n < 10)时,没有相邻数字需要比较,此时应该返回0作为递归终止的基准值,原代码会陷入无限递归。 - 条件判断逻辑错误:第一个
if中的== 1 or 0写法不符合预期,等价于(n%10 - (n//10)%10 ==1) or 0,而0在布尔判断中为False,导致无法正确处理相邻数字相等(差为0)的情况。 - 无效递归分支:最后一个
return iter(n)会引发无限递归,而根据题目要求,输入的n是递增排列的数字,相邻数字的差不可能小于0,这个分支完全多余。
修正后的代码
def missing_digits(n): # 递归终止条件:个位数无相邻数字,缺失数为0 if n < 10: return 0 # 获取最后两位数字 last = n % 10 second_last = (n // 10) % 10 diff = last - second_last # 计算当前两位的缺失数,加上剩余部分的缺失数 if diff > 1: return (diff - 1) + missing_digits(n // 10) else: # 差为0或1时无缺失,递归处理剩余部分 return missing_digits(n // 10)
测试验证
用题目给出的测试用例验证结果符合预期:
>>> missing_digits(1248) # 缺失3,5,6,7 4 >>> missing_digits(1122) # 无缺失数字 0 >>> missing_digits(123456) # 无缺失数字 0 >>> missing_digits(3558) # 缺失4,6,7 3 >>> missing_digits(35578) # 缺失4,6 2
内容的提问来源于stack exchange,提问作者Proteus Yi
相关产品推荐
相关产品推荐

