这段代码应该通过将无序列表一分为二来递归地找到该列表的最小值和最大值。它每对半调用一次函数。有两个例外,如果列表只有一个项目,它只返回该项目作为最小值和最大值。如果列表有两个项目,则直接比较这两个项目,并返回相应的最小值和最大值。下面是代码
import random
unordered = [5, 2, 3, 1, 4]
#x = 0
#while x < 10:
# unordered.append(random.randrange(0,100))
# x += 1
print(unordered)
def minMax(x):
if len(x) == 1:
return x[0], x[0]
if len(x) == 2:
if x[0] > x[1]:
max_ = x[0]
min_ = x[1]
else:
max_ = x[1]
min_ = x[0]
return max_, min_
if len(x) > 2:
global min_, max_, maxA, maxB, minA
a = x[:len(x)//2]
b = x[len(x)//2:]
maxA, minA = minMax(a)
maxB, minB = minMax(b)
if maxA > maxB:
max_ = maxA
if maxB > maxA:
max_ = maxB
if minA < minB:
min_ = minA
if minB < minA:
min_ = minB
return max_, min_
print(minMax(unordered))
出于某种原因,它返回(4,1)。 当我设置unordered=[1,2,3,4,5]时,它认为3是最小值,但它正确地将5标识为最大值
因为
unordered
是一个列表。为什么不用Python's max function,而不是自己写呢>>> unordered = [5, 2, 3, 1, 4]
>>> max(unordered)
5
否则为什么不做像
def min(list): min = none for x in list: if min == none: min = x elif x < min: min = x return min
相关问题 更多 >
编程相关推荐