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

时间:2013-05-31 00:56:09

标签: python recursion

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'是可比值的列表。

2 个答案:

答案 0 :(得分:2)

考虑chooseBest([x,y,z])是否可以返回x。

答案 1 :(得分:0)

如果您试图以递归方式找到可比值列表中的最大元素,请按以下步骤操作:

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'