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

我的Python递归求最大值代码未通过作业系统,求排查提示

帮你排查代码里的问题

嗨,我来帮你看看为什么作业系统判定你的代码不正确~你的思路是对的,但有几个关键问题需要调整:

核心问题:全局变量导致多次调用结果污染

你把numList定义在函数外面作为全局变量,这会导致每次调用函数时,之前的数值不会被清空。比如:

print(max_val((5, (1,2))))  # 返回5,此时numList里存着[5,1,2]
print(max_val((3)))         # 本该返回3,但实际返回5,因为numList变成了[5,1,2,3]

作业系统大概率会多次测试你的函数,这种全局变量的污染直接导致结果错误。

次要问题:类型判断的写法不严谨

你用type(t) is int和t[i] is int来判断类型:

  • is是用来判断对象的身份是否完全相同,判断类型应该用isinstance(t, int)——它能正确处理继承关系(比如bool是int的子类,isinstance(True, int)会返回True,而type(True) is int返回False)。
  • 另外,t[i] is int这个判断永远是False:t[i]是整数对象(比如5),而int是类型对象,两者身份完全不同。虽然你的代码靠递归调用绕开了这个问题,但逻辑本身是错误的。

改进方案:用递归直接计算最大值(无全局变量)

去掉全局变量,让函数递归时直接返回当前部分的最大值,再比较所有子部分的最大值,这样更高效也更可靠:

def max_val(t):
    if isinstance(t, int):
        return t
    # 处理列表、元组这类可迭代容器
    current_max = -float('inf')
    for item in t:
        sub_max = max_val(item)
        if sub_max > current_max:
            current_max = sub_max
    return current_max

这个版本的优势:

  • 每次调用都是独立的,不会残留之前的计算数据
  • 直接递归计算最大值,不需要先收集所有整数再取最大值,效率更高
  • 类型判断更严谨,能兼容更多边界情况

测试你的例子:

print(max_val((5, (1,2), [[1],[2]])))  # 返回5,正确
print(max_val((3)))                    # 返回3,正确
print(max_val((10, (20, [5, 15]), 7))) # 返回20,正确

你可以试试这个版本,应该能通过作业系统的测试~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:52:36