2017-07-28 104 views
2

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

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

当前使用示例数据返回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]]))) 
+0

为什么'_max_val'采用'result'参数,如果你不使用它,而是覆盖它? –

+0

@Professor_Joykill,最初我在助手函数中设置了result = 0,但随后每次递归调用时它都被重置为0。我只希望它在一开始就是0,我的逻辑是否有意义? – itsJana

+0

如果您想使用'.append()',那么一种可能性就是做'return(max(results))',它将返回'results'列表中最大的值,这将是整个元组中最大的值。 –

回答

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。否则,如果cint那么我测试是否c > highest,这意味着最高只会在c实际上更大时才会更改。然后,一旦循环完成,它将返回最高值,在这种情况下为20,将在maxInTuple()函数中设置为result,然后返回result,然后printed