【发布时间】:2019-09-22 23:46:26
【问题描述】:
此代码应该通过将列表分成两半来递归地找到无序列表的最小值和最大值。一半一次,它在每一半上再次调用该函数。有两个例外,如果列表只有 1 个项目,它只会将该项目作为最小值和最大值返回。如果列表有两个项目,那么它直接比较这两个项目并返回适当的最小值和最大值。这是代码。
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 识别为最大值。
【问题讨论】:
-
global min_, max_, maxA, maxB, minA是怎么回事?为什么要使用全局变量? -
(你也忘了
minB。) -
您没有处理
maxA和maxB相等的情况(分钟相同)。诚然,这不是这个列表的问题,但在某些情况下会出现问题。 -
全局变量和递归不能混用。
-
@Retsek:你的递归调用在彼此的数据上都被跺脚,因为它们试图共享同一组全局变量。
标签: python python-3.x list recursion comparison