2017-05-19 62 views
0

另一个参数的多个列表中找到一个最大值e.g在同样使用递归

l = [1, 4, 5, 9, 11] 
print(max_multiples_list(l, 3)) 
>>> 9 

我的代码似乎工作,但失败隐藏的情况下,我也许猜测当列表是空的?

def max_multiples_list(lst,m): 
if len(lst) == 1: 
    if lst[0] % m != 0: 
     return 0 
    else: 
     return lst[0] 
else: 
    n = max_multiples_list(lst[1:],m) 
    if lst[0] % 2 == 0: 
     return n 
    else: 
     return n if n > lst[0] and n%m == 0 else lst[0] 
+1

什么'如果LST点[0 ]%2 == 0:'? –

+0

不应该在else子句中返回n如果lst [0]%m或n> lst [0] else lst [0]',而没有任何其他奇怪的东西? –

回答

0

如果您有任何问题,可以尝试此代码并留下您的反馈。 (PS:为了跟踪递归print(a, v_max)之前删除评论):

NB:

  • 如果返回等于0:没有输入的发现的最大值名单。

  • 如果返回的是None:输入的列表是空的

代码:

def max_multiple(a, number, v_max=0): 
     # Debug 
     # print(a, v_max) 
     if len(a) is 0: 
      return None 

     v_max = a[0] if a[0] % number is 0 and a[0] > v_max else v_max 

     return v_max if len(a) is 1 else max_multiple(a[1:], number, v_max) 

# Some tests 
l = [1, 4, 5, 9, 11] 
print(max_multiple(l, 3)) 

l = [1, 4, 5, 9, 11, 15, 16, 21, 30, 21, 3, 15] 
print(max_multiple(l, 3)) 

l = [1, 4, 5, 9, 11, 15, 16, 21, 30, 21, 3, 30, 60] 
print(max_multiple(l, 3)) 

l = [4] 
print(max_multiple(l, 3)) 

l = [12] 
print(max_multiple(l, 3)) 

l = [] 
print(max_multiple(l, 3)) 

输出:

9 
30 
60 
0 
12 
None