2017-05-19 58 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