这段代码只是通过分而治之的算法找到最大的数字。代码本身可以很好地工作,并在my_data [0]中找到大号和存储。它正确打印最大数字。但是当我尝试返回它并存储在'val'变量中时,'None'被存储而不是最大的数字。为什么return语句只返回'none'而不是my_data [0] .. ??由于返回值不正确,我无法继续执行代码。谁能说出这是什么错?提前谢谢..
def largest(my_data):
if len(my_data) == 1:
print my_data[0]
return my_data[0]
else:
alist = []
blist = []
for i in range(0,len(my_data),2):
if my_data[i] > my_data[i+1]:
alist.append(my_data[i])
blist.append(my_data[i+1])
else:
alist.append(my_data[i+1])
blist.append(my_data[i])
my_data = list(alist)
largest(my_data)
my_data = [12,45,63,13,76,87,23,85,56,123,7856,132,786,124,756,25366468]
val = largest(my_data)
print val
答案 0 :(得分:3)
编写递归代码时,需要确保递归调用返回的值必须传回。所以,
largest(my_data)
必须像这样返回
return largest(my_data)
另外,
my_data = list(alist)
如果您真的想将alist
转换为列表,则不需要此声明。因为它已经是一个列表。所以,你可以直接写
return largest(alist)
好奇的是,您放弃了添加到blist
的值,那为什么还要加入?
所以,如果你真的不需要blist
,那么你的代码可以用列表理解来编写,就像这样
return largest([my_data[i] if my_data[i] > my_data[i+1] else my_data[i+1]
for i in range(0,len(my_data),2)])
答案 1 :(得分:0)
如果您阅读了代码,您会注意到else
子句中没有返回任何内容。如果你想让它成为一个递归函数,通常就是从递归调用中返回值。