我试图获取一个函数,使用递归查找序列中的最大项目,但我一直收到错误,就像我尝试 MAX(范围(100)):
TypeError: unorderable types: int() > list()
我是一个编程新手btw所以任何帮助都非常感谢。
def Max(s)
if len(s) == 1:
return s[0]
else:
m = Max(s[1:])
if m > s:
return m
else:
return s[0]
答案 0 :(得分:5)
你似乎忘了把索引:
def Max(s):
if len(s) == 1:
return s[0]
else:
m = Max(s[1:])
if m > s[0]: #put index 0 here
return m
else:
return s[0]
m
是单个数字,因此无法与s
list
进行比较。因此你得到了你的错误。
附注,考虑使用三元操作[true_val if true_cond else false_val]
来简化您的表示法。此外,您不需要上一个else
块,因为您的if
子句在离开块之前已明确return
:
def Max(s):
if len(s) == 1:
return s[0]
m = Max(s[1:])
return m if m > s[0] else s[0] #put index 0 here
然后您的代码将变得更加简单。
答案 1 :(得分:1)
此变体将通过在递归的每个级别将问题切成两半来减少堆栈大小,并递归地求解两半。这允许您评估具有数千个元素的列表,其中将问题大小减小一个的方法会导致堆栈溢出。
def Max(lst):
l = len(lst)
if l > 1:
mid = l / 2
m1 = Max(lst[:mid]) # find max of first half of the list
m2 = Max(lst[mid:]) # find max of second half of the list
# max of the list is the larger of these two values
return m1 if m1 > m2 else m2
return lst[0]