递归查找列表中的最小值

4

我正在尝试递归地查找列表中的最小值。由于我在适应递归方法方面还很新,因此我想寻求有关我的代码行的帮助:

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)

我很希望能有人帮助我,因为我对递归还比较陌生,我的理解肯定不够到位。


minNumber = findMinimum(l-1) what do you mean by that? You cannot subtract an integer from a list. Do you mean minNumber = findMinimum(l[:-1]) - Ma0
@Ev.Kounis 抱歉,这是我第一次尝试自己编写递归函数。请原谅我对递归的理解不够深入。非常感谢您的建议,现在我明白了。 - Maxxx
2个回答

4
你的函数的第一部分是正确的。但你需要将第二部分更改为以下内容:
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)

请记住,递归函数的出现是为了让我们的代码更简单、更易于理解。


2
你的代码结构基本正确,但有一些错误。首先,你不应该在函数内部使用listAlistA 作为参数从外部传入,在函数内部只应该引用 l。在非递归情况下(即len(l) == 1时),应该返回l[0](一个元素的列表的最小值就是这个元素)。然后,可以在函数内部再次调用findMinimum(这是递归调用,你已经知道了);不过,你可能想要用除第一个元素以外的所有列表l[1:]来调用它。然后,你应该将结果minNumber与列表l的第一个元素进行比较;其思路是选择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)

谢谢!else语句特别有帮助。 - Maxxx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接