我试图使用递归获得一个函数来查找序列中的最大项,但是我一直得到一个错误,比如当我尝试max (range(100))时:
TypeError: unorderable types: int() > list()我是一个编程新手,所以任何帮助都是非常感谢的。
def Max(s)
if len(s) == 1:
return s[0]
else:
m = Max(s[1:])
if m > s:
return m
else:
return s[0]发布于 2016-03-09 14:00:44
你似乎忘了把这个指数:
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那么您的代码就会变得简单得多。
发布于 2016-03-09 15:15:14
该变体将在每个递归级别将问题分割成两半,并对两部分进行递归解决,从而减少堆栈大小。这允许您评估具有数千个元素的列表,在这些元素中,将问题大小减少一个的方法会导致堆栈溢出。
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]https://stackoverflow.com/questions/35893550
复制相似问题