ホームページ  >  記事  >  バックエンド開発  >  Python でリスト内の要素の合計を再帰的に計算するにはどうすればよいですか?

Python でリスト内の要素の合計を再帰的に計算するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-21 12:50:31520ブラウズ

How to Recursively Calculate the Sum of Elements in a List in Python?

Python の再帰の基礎

再帰は、関数が問題を解決するためにそれ自体を呼び出すコンピューター サイエンスの強力な手法です。このコンテキストでは、指定されたリスト内のすべての整数の合計を求める「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 になります。

listSum の実装

<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。