2017-03-15 20 views
-1

私はPythonで乗算再帰(コンテナのすべての値を掛ける)を試みています。この関数は、リストの要素を位置引数(* n)として受け取ります。実行時に、「最大再帰深度に達しました」というエラーが表示されます。しかし、単に* nの代わりにnを使用してリスト内の要素を送信すれば、コードは正常に動作します。再帰は位置引数では機能しません

コードに動作していない:

def multiply(*n): 
    if n:  
     return n[0]*multiply(n[1:]) 
    else: 
     return 1 

multiply(5,1,4,9) 

の作業コード:

def multiply(n): 
    if n:  
     return n[0]*multiply(n[1:]) 
    else: 
     return 1 

multiply([5,1,4,9]) 

答えて

0

のコードの最初の部分では、

multiply(n[1:])

は一個の引数でmultiplyを呼び出している式を。すなわち、リストの残りの部分。あなたは*nに位置任意の数の引数を期待する関数を教えてくれたとき

multiply(*n[1:])

0

:リストn[1:]の内容に等しいの引数でそれを呼び出すためには、あなたはそうのように、再びスプラット演算子を使用しますあなたはそのフォーマットでそれを収容する必要があります:複数の引数で、すべての引数を含む単一の繰り返し可能なものではありません。要素を引数として使用する単一の反復可能な要素がある場合は、それを呼び出すときに*で展開する必要があります。 2番目の関数は、単一の反復可能な引数を期待しており、1つの反復可能な引数を送信するために機能します。

n[1:]*n[1:]に置き換えます。

関連する問題