如何使用递归函数在给定列表中找到最小值

时间:2019-11-10 11:33:47

标签: python-3.x

我试图编写一个递归函数以在列表中找到最小值,但我坚持下一步要做的事情。

def findRecMin(aList):
if(len(aList)==1):
    return aList[0]
else:
    min_of_the_rest = findRecMin(aList[1:])

myList = [16, 20, 3, 37, 95, 49, 61]
n = findRecMin(myList)
print(n)

我需要找到给定列表的最小值。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

如果您采取了“信念飞跃”并假定递归调用给出了正确的结果,那么编写这样的递归函数将很简单。在这种情况下,您的代码

min_of_the_rest = findRecMin(aList[1:])

在列表的尾部进行递归调用,该列表除第一个元素以外的所有内容。因此,让我们假设它确实确实为您提供了从尾部开始的最少元素;您现在需要解决的唯一问题是,如何使用aList[0]的第一个元素和尾部的最小值来找到整个列表的最小值?aList[0]min_of_the_rest中较小的那个,是整个列表的真实最小值。所以我们可以写类似

if aList[0] < min_of_the_rest:
    return aList[0]
else:
    return min_of_the_rest

或更简单地,使用min函数

return min(aList[0], min_of_the_rest)

这种方法适用于在列表上编写多种递归函数;假定递归调用会为您提供正确的尾部结果,然后计算出如何将第一个元素与该结果结合起来以获得整个列表的结果。例如:

  • 查找总和:整个列表的总和为aList[0] + sum_of_the_rest
  • 查找长度:整个列表的长度为1 + len_of_the_rest
  • 测试数字x是否在列表中:aList[0] == x or the_rest_contains_x