再帰

2017-05-19 21 views
0

例えば再帰

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節で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