使用递归函数

时间:2017-05-19 00:07:40

标签: python recursion

def max_even_list(list):
if len(list) == 1:
    if list[0] % 2 == 0:
        return list[0]
else:
    if list[0] % 2 == 0:
        return max(list[0], max_even_list(list[1:]))
    else:
        return max_even_list(list[1:])

我收到错误消息:TypeError:'>' ' NoneType'的实例之间不支持和' int'

任何人都可以帮我修复此代码,该代码返回列表中最大的偶数

3 个答案:

答案 0 :(得分:2)

len(list)1list[0] % 2不为0时,您不会返回任何内容。因此,如果列表的最后一个元素是奇数,则此代码将不起作用。

如果len(list)1list[0] % 2不为0,则可以返回-infinity,如:

def max_even_list(list):
    if len(list) == 1:
        if list[0] % 2 == 0:
            return list[0]
        else:
            return float("-inf")
    else:
        if list[0] % 2 == 0:
            return max(list[0], max_even_list(list[1:]))
        else:
            return max_even_list(list[1:])

答案 1 :(得分:1)

FWIW,这是获得最大偶数的另一种方式。

lst = [1, 2, 2 ,6, 7, 7, 8, 10, 11]

max(filter(lambda x: x%2 == 0, lst))
# 10

参考:Python max()

答案 2 :(得分:1)

您只需要关注3个案例:

  1. 当提供的数字列表为空时,返回一些值(在本例中我选择了0.如果您希望函数支持负数,可以使用-infinity
  2. 当列表的开头(xs[0])为偶数时,返回列表其余部分的max xs[0]max_even {{1} }})
  3. 否则列表的开头不均匀;返回列表其余部分xs[1:]max_even
  4. 这可以通过微不足道的工作编译成一个python程序

    xs[1:]