再帰は、関数が問題を解決するためにそれ自体を呼び出すコンピューター サイエンスの強力な手法です。このコンテキストでは、指定されたリスト内のすべての整数の合計を求める「listSum」と呼ばれる再帰的 Python 関数を開発するという問題に取り組みます。
問題を考えてみましょう。「再帰的関数 'listSum' を作成します」これは整数のリストを受け取り、リスト内のすべての整数の合計を返します。
この問題を再帰的に解決する方法を理解するには、関数自体の観点から解を表現する必要があります。このシナリオでは、同じ関数をリストの残りの要素に適用した結果に最初の数値を加算することで結果を取得できます。例:
listSum([1, 3, 4, 5, 6]) = 1 + listSum([3, 4, 5, 6]) = 1 + (3 + listSum([4, 5, 6])) = 1 + (3 + (4 + listSum([5, 6]))) = 1 + (3 + (4 + (5 + listSum([6])))) = 1 + (3 + (4 + (5 + (6 + listSum([])))))
この例では、基本条件は listSum([]) であり、空のリストを表します。空のリストには合計する要素がないため、結果は 0 になります。
<code class="python">def listSum(ls): # Base condition if not ls: return 0 # First element + result of calling `listsum` with rest of the elements return ls[0] + listSum(ls[1:])</code>
この実装では、基本条件として空のリストをチェックし、0 を返します。要素を含むリストの場合、最初の要素を残りの要素の再帰結果に追加します。
最適化のために、前の再帰呼び出しの戻り値に依存することを回避できます。 。結果をパラメータとして渡すと、基本条件が満たされたときにすぐに値を返すことができます:
<code class="python">def listSum(ls, result): if not ls: return result return listSum(ls[1:], result + ls[0])</code>
このバージョンでは、効果的に合計を 'result' パラメータに蓄積し、基本条件が満たされたときにそれを返します。 .
中間リストの作成を避けるために、現在の要素のインデックスを渡すことができます:
<code class="python">def listSum(ls, index, result): # Base condition if index == len(ls): return result # Call with next index and add the current element to result return listSum(ls, index + 1, result + ls[index])</code>
基本条件は、インデックスが到達したかどうかをチェックします。リストの最後。
パラメータの処理を簡素化するために、再帰を処理する内部関数を作成できます。
<code class="python">def listSum(ls): def recursion(index, result): if index == len(ls): return result return recursion(index + 1, result + ls[index]) return recursion(0, 0)</code>
簡単にするために、デフォルトのパラメータを使用できます:
<code class="python">def listSum(ls, index=0, result=0): # Base condition if index == len(ls): return result # Call with next index and add the current element to result return listSum(ls, index + 1, result + ls[index])</code>
以上がPython でリスト内の要素の合計を再帰的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。