递归地在混合类型的元组中找到最大值

时间:2017-07-28 19:12:28

标签: python recursion tuples

我正在编写一个函数,以递归方式查找可能包含更多元组或列表的元组中的最大值。目前代码跟踪结果,但在每次递归调用完成后,返回子列表或子元组的最大值。

如何更改它以便仅返回全局最大值?我尝试在每次递归调用结束时将值附加到列表中,但最后不能返回任何值。

目前使用示例数据返回4,6,10和20,最后只想返回20。 编辑:代码有效,将每个答案附加到列表“结果”并在结尾处返回“结果”的最大值。

def maxInTuple(t):
    results=[]
    maxVal =0
    _max_val(t, maxVal, results)
    return max(results)

def _max_val(t, maxVal, results):
    for c in t:
        if type(c) != int:
            _max_val(c, maxVal, results)
        elif c > result
            result =c
    results.append(ans) 
    #return ans

print ( maxInTuple(([2, 3, 4], (5, 6), [10, [4, 20]])))

1 个答案:

答案 0 :(得分:1)

以下是我修复代码的方法:

def maxInTuple(t):
    result = 0
    result = _max_val(t, result)
    return result
def _max_val(t, highest):
    for c in t:
        if type(c) != int:
            highest = _max_val(c, highest)
        else:
            if c > highest:
                highest = c
    return highest

print(maxInTuple(([2, 3, 4], (5,6),[10,[4,20]])))

我做了什么:

如果maxInTuple函数返回从_max_val函数获得的结果。在这种情况下,传递给_max_val函数的第二个变量是0。然后在_max_val函数中,如果它不是int我设置的最高值等于子集所属的_max_val,那么例如在[2,3,4]中它将使highest = 4 c 1}}。否则如果intc > highest,那么我测试了c,这意味着只有当20实际上更大时才会更改最高值。然后,一旦完成循环,它将返回最高值,在这种情况下result,将在maxInTuple()函数中设置为result,然后{{1}返回,然后是printed