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

Mary-Kate Olsen
リリース: 2024-10-21 12:50:31
オリジナル
519 人が閲覧しました

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

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!