如何用递归实现Python数字最小数位查找?现有代码输出异常
问题分析与修复
你的递归函数有两个核心问题:
- 递归调用的结果完全没被利用:你调用了
min_dig(num / 10),但既没把这个结果存起来,也没和当前数位做比较,等于白跑了递归流程。 - 用了浮点数除法:
num / 10会得到浮点数(比如98918/10=9891.8),虽然最后能返回数字,但递归过程中处理浮点数容易出问题,应该用整数除法//。
另外你定义的minimum变量完全没起到作用——初始值是9,最后只和当前数的最后一位比较,所以返回的永远是最后一位(只要最后一位小于9),根本没考虑前面数位里的更小值(比如你例子里的1)。
修复后的递归代码
def min_dig(num): # 基线条件:只有一位数时,它自己就是最小数位 if num < 10: return num # 递归得到去掉最后一位后的数的最小数位 min_rest = min_dig(num // 10) # 比较当前最后一位和递归结果,返回更小的那个 return min(num % 10, min_rest) print(min_dig(98918)) # 输出1,符合预期
运行逻辑说明
拿98918举例:
- 第一次调用
min_dig(98918),因为98918≥10,递归调用min_dig(9891),同时记录当前最后一位是8。 min_dig(9891)继续递归min_dig(989),当前最后一位是1。min_dig(989)递归min_dig(98),当前最后一位是9。min_dig(98)递归min_dig(9),当前最后一位是8。min_dig(9)触发基线条件,返回9。- 回到
min_dig(98),比较8和9,返回8。 - 回到
min_dig(989),比较9和8,返回8。 - 回到
min_dig(9891),比较1和8,返回1。 - 回到
min_dig(98918),比较8和1,返回1。
这样整个递归链条就把每一位都比较到了,最终得到正确的最小数位。
内容的提问来源于stack exchange,提问作者Dark Syrox
相关产品推荐
相关产品推荐

