以递归方式查找列表中的最小值

时间:2017-06-14 11:48:57

标签: python recursion

我试图以递归方式找到列表中的最小值。由于我仍然适应递归方法,我想就我的代码行寻求一些帮助:

listA = [9,-2,6,1,80,9,-2]

def findMinimum(l):
    if len(l) == 1:
       return l

    else:
       minNumber = findMinimum(l-1)
       min = listA[0]
       for i in listA:
           if listA[i]<listA[i+1]:
            min = listA[i]
            return min

findMinimum(listA)

如果有人能帮助我,我会很感激,因为我对递归比较陌生,而且我的理解肯定符合标准。

2 个答案:

答案 0 :(得分:3)

你的功能的第一部分是正确的。但你应该像这样改变第二部分:

listA = [9,-2,6,1,80,9,-2]

def findMinimum(l):
    if len(l) == 1:
       return l[0]

    else:
       return min(l[0], findMinimum(l[1:]))

findMinimum(listA)

请记住,递归函数可以使我们的代码更简单,更容易。

答案 1 :(得分:2)

您的代码结构是正确的,但它有一些错误。首先,您不应该在函数内部使用listA; listA作为参数从外部传递,并且在函数内部,您应该只引用l。在非递归的情况下(其中len(l) == 1),您应该返回l[0](具有一个元素的列表的最小值是一个元素)。然后,再次在函数内部调用findMinimum是正确的(正如您所知,这是递归调用);但是,您可能想要的是使用除第一个元素之外的所有列表l来调用它,即l[1:]。然后,您应该将结果minNumberl的第一个元素进行比较;我们的想法是选择l[0]中最小的l[1:]listA = [9,-2,6,1,80,9,-2] def findMinimum(l): if len(l) == 0: raise ValueError('Cannot find the minimum of an empty list.') elif len(l) == 1: return l[0] else: minNumber = findMinimum(l[1:]) min = l[0] if minNumber < min: min = minNumber return min findMinimum(listA) 中的最小值。然后你返回你选择的那个。

此外,当您获得一个空列表并抛出错误时,您可能需要考虑这种情况;如果你不这样做,你可能会进入无限递归!

所以一个可能的解决方案可能是这样的:

implements NativeMouseInputListener