2017-07-28 13 views
2

タプルまたはリストをさらに含むタプルの最大値を再帰的に見つける関数を記述しています。現在、コードは結果を追跡しますが、各再帰呼び出しが終了すると、サブリストまたはサブタプルの最大値が返されます。複合型のタプルで最大値を再帰的に見つける

グローバルmaxのみが返されるように変更するにはどうすればよいですか?私は各再帰呼び出しの終わりにリストに値を追加しようとしましたが、最後に値を返すことができませんでした。

現在、サンプルデータを使用して4,6,10、および20を返します。最後に20を返します。 編集:コードが機能し、各回答をリスト "結果"に追加し、最後に "結果"の最大値を返します。ここで

def maxInTuple(t): 
    results=[] 
    maxVal =0 
    _max_val(t, maxVal, results) 
    return max(results) 

def _max_val(t, maxVal, results): 
    for c in t: 
     if type(c) != int: 
      _max_val(c, maxVal, results) 
     elif c > result 
      result =c 
    results.append(ans) 
    #return ans 

print (maxInTuple(([2, 3, 4], (5, 6), [10, [4, 20]]))) 
+0

'_max_val'は、あなたがそれを使用せず、それを上書きするのであれば、なぜ' result'パラメータを取るのですか? –

+0

@ Professor_Joykill、もともと私はヘルパー関数でresult = 0を設定しましたが、各回帰呼び出しごとに0にリセットされるたびにresult = 0を設定しました。私は最初から0にしたいだけですが、私の論理は理にかなっていますか? – itsJana

+0

'.append()'を使いたい場合、 'results()'リストの中で最大の値を返す 'return(max(results))'を実行する可能性があります。 –

答えて

1

は、私は、コードを修正するために何をしたかである:

私がやったこと
def maxInTuple(t): 
    result = 0 
    result = _max_val(t, result) 
    return result 
def _max_val(t, highest): 
    for c in t: 
     if type(c) != int: 
      highest = _max_val(c, highest) 
     else: 
      if c > highest: 
       highest = c 
    return highest 

print(maxInTuple(([2, 3, 4], (5,6),[10,[4,20]]))) 

maxInTuple関数は_max_val関数から得た結果を返していました。この場合、_max_val関数に渡された2番目の変数は0でした。それで_max_val機能では、それがintではなかった場合、私はサブセットを持つ_max_valと同じものを最高に設定しました。したがって、例えば[2,3,4]の場合はhighest = 4となります。それ以外の場合、cintだった場合は、c > highestかどうかをテストしました。つまり、最高値はcが実際に大きくなった場合にのみ変更されます。その後、ループが終了すると、最大値(この場合は20)が返され、のresultに設定され、次にresultが返されます。printedです。

関連する問題