我的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
相关产品推荐
相关产品推荐

