如何用递归实现两整数匹配数字统计(禁用全局变量)
递归实现两个整数匹配数字统计
你的原代码存在几个问题:多余的for循环(递归本身会逐位处理,不需要循环)、不必要的大小分支判断(不管两个数长度差异,递归会自动处理到其中一方变为0)、终止条件的返回值错误。
下面是正确的递归实现,完全符合你的要求(无全局变量,仅接受两个整数参数):
def digit_match(number1, number2): # 获取两个数的最后一位数字 d1 = number1 % 10 d2 = number2 % 10 # 判断当前位是否匹配,匹配则记1,否则记0 current_match = 1 if d1 == d2 else 0 # 终止条件:当两个数都被拆分为0时,没有更多位可比较,返回0 if number1 == 0 and number2 == 0: return 0 # 递归处理去掉最后一位的两个数,累加当前位的匹配结果 return current_match + digit_match(number1 // 10, number2 // 10)
逻辑解释
- 逐位比较:每次取两个数的最后一位,判断是否匹配,得到当前位的匹配数。
- 递归递进:将两个数分别除以10(去掉最后一位),递归调用函数处理剩余部分。
- 终止条件:当两个数都被拆分为0时,说明所有位都已比较完毕,返回0不再继续递归。
示例验证
- 输入
digit_match(123456, 3456):逐位比较最后4位均匹配,最终返回4。 - 输入
digit_match(12345, 54321):仅中间第三位(3和3)匹配,最终返回1。
内容的提问来源于stack exchange,提问作者Ahmet Cem Çalık
相关产品推荐
相关产品推荐

