【问题标题】:Recursively finding the maximum value in a tuple of mixed types递归查找混合类型元组中的最大值
【发布时间】:2017-07-28 19:12:27
【问题描述】:

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

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

目前使用样本数据返回 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]])))

【问题讨论】:

  • 为什么_max_val 不使用result 参数,而是覆盖它?
  • @Professor_Joykill,最初我在 helper 函数中设置了 result =0,但每次递归调用时它都会重置为 0。我一开始只希望它为0,我的逻辑有意义吗?
  • 如果你想使用.append(),一种可能的方法是使用return(max(results)),这将返回results列表中的最大值,这将是整个元组中的最大值。跨度>
  • 很高兴您提供代码示例,但请确保它运行。
  • @Professor_Joykill 我做了追加工作,谢谢

标签: python recursion tuples


【解决方案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,即@ 987654339@.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    相关资源
    最近更新 更多