我试图以递归方式找到列表中的最小值。由于我仍然适应递归方法,我想就我的代码行寻求一些帮助:
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)
如果有人能帮助我,我会很感激,因为我对递归比较陌生,而且我的理解肯定符合标准。
答案 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:]
。然后,您应该将结果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)
中的最小值。然后你返回你选择的那个。
此外,当您获得一个空列表并抛出错误时,您可能需要考虑这种情况;如果你不这样做,你可能会进入无限递归!
所以一个可能的解决方案可能是这样的:
implements NativeMouseInputListener