使用递归查找序列中的最大项

时间:2016-03-09 13:53:27

标签: python recursion max

我试图获取一个函数,使用递归查找序列中的最大项目,但我一直收到错误,就像我尝试       MAX(范围(100)):

TypeError: unorderable types: int() > list()

我是一个编程新手btw所以任何帮助都非常感谢。

def Max(s)
    if len(s) == 1:
        return s[0]
    else:
        m = Max(s[1:])
        if m > s:
            return m
        else:
            return s[0]

2 个答案:

答案 0 :(得分:5)

你似乎忘了把索引:

def Max(s):
    if len(s) == 1:
        return s[0]
    else:
        m = Max(s[1:])
        if m > s[0]: #put index 0 here
            return m
        else:
            return s[0]

m是单个数字,因此无法与s list进行比较。因此你得到了你的错误。

附注,考虑使用三元操作[true_val if true_cond else false_val]来简化您的表示法。此外,您不需要上一个else块,因为您的if子句在离开块之前已明确return

def Max(s):
    if len(s) == 1:
        return s[0]
    m = Max(s[1:])
    return m if m > s[0] else s[0] #put index 0 here

然后您的代码将变得更加简单。

答案 1 :(得分:1)

此变体将通过在递归的每个级别将问题切成两半来减少堆栈大小,并递归地求解两半。这允许您评估具有数千个元素的列表,其中将问题大小减小一个的方法会导致堆栈溢出。

def Max(lst):
    l = len(lst)
    if l > 1:
        mid = l / 2
        m1 = Max(lst[:mid])     # find max of first half of the list
        m2 = Max(lst[mid:])     # find max of second half of the list
        # max of the list is the larger of these two values
        return m1 if m1 > m2 else m2
    return lst[0]