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

如何用递归实现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举例:

  1. 第一次调用min_dig(98918),因为98918≥10,递归调用min_dig(9891),同时记录当前最后一位是8。
  2. min_dig(9891)继续递归min_dig(989),当前最后一位是1。
  3. min_dig(989)递归min_dig(98),当前最后一位是9。
  4. min_dig(98)递归min_dig(9),当前最后一位是8。
  5. min_dig(9)触发基线条件,返回9。
  6. 回到min_dig(98),比较8和9,返回8。
  7. 回到min_dig(989),比较9和8,返回8。
  8. 回到min_dig(9891),比较1和8,返回1。
  9. 回到min_dig(98918),比较8和1,返回1。

这样整个递归链条就把每一位都比较到了,最终得到正确的最小数位。

内容的提问来源于stack exchange,提问作者Dark Syrox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:05:31