递归比较,你能指出我的错误吗?

2024-10-03 06:31:11 发布

您现在位置:Python中文网/ 问答频道 /正文

def chooseBest(s):
    if len(s) == 2:
        c = cmp(s[0], s[1])
        if c == -1 or c == 0:
            return s[0]
        elif c == 1:
            return s[1]
    else:
        return chooseBest(s[1:])

其中“s”是可比较值的列表。你知道吗


Tags: or列表lenreturnifdefelsecmp
2条回答

想想chooseBest([x,y,z])是否可以返回x

如果您试图递归地在可比较的值列表中查找最大的元素,那么应该这样做:

def chooseBest(s):
    if not s:
        return None
    best = chooseBest(s[1:])
    return s[0] if s[0] > best else best

甚至更短:

def chooseBest(s):
    return max(s[0], chooseBest(s[1:])) if s else None

无论哪种方式,它都适用于内置的可比较数据类型。如果出于某种原因需要将其与定义的类型进行比较,请不要忘记将其与None进行比较:

chooseBest([1, 2, 5, 3, 4])
=> 5

chooseBest(['a', 'b', 'z', 'c', 'd'])
=> 'z'

相关问题 更多 >