Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Mengira Secara Rekursif Jumlah Elemen dalam Senarai dalam Python?

Bagaimana Mengira Secara Rekursif Jumlah Elemen dalam Senarai dalam Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-21 12:50:31520semak imbas

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

Asas Rekursi dalam Python

Rekursi ialah teknik yang berkuasa dalam sains komputer di mana fungsi memanggil dirinya sendiri untuk menyelesaikan masalah. Dalam konteks ini, kami menangani persoalan membangunkan fungsi Python rekursif yang dipanggil "listSum" untuk menentukan jumlah semua integer dalam senarai yang diberikan.

Pertimbangkan masalahnya: "Tulis fungsi rekursif, 'listSum,' yang mengambil senarai integer dan mengembalikan jumlah semua integer dalam senarai."

Pemahaman Konseptual

Memahami cara menyelesaikan masalah ini secara rekursif memerlukan menyatakan penyelesaian dari segi fungsi itu sendiri. Dalam senario ini, keputusan boleh diperolehi dengan menambah nombor pertama kepada hasil penggunaan fungsi yang sama pada elemen yang tinggal dalam senarai. Contohnya:

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([])))))

Dalam contoh ini, keadaan asas ialah listSum([]), yang mewakili senarai kosong. Memandangkan senarai kosong tidak mempunyai unsur untuk dijumlahkan, hasilnya ialah 0.

Melaksanakan 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>

Dalam pelaksanaan ini, kami menyemak senarai kosong sebagai syarat asas dan mengembalikan 0. Untuk senarai dengan elemen, kami menambah elemen pertama pada hasil rekursif unsur yang tinggal.

Rekursi Panggilan Ekor

Untuk pengoptimuman, kami boleh mengelak daripada bergantung pada nilai pulangan panggilan rekursif sebelumnya . Melepasi keputusan sebagai parameter membolehkan kami mengembalikan nilai dengan segera apabila syarat asas dipenuhi:

<code class="python">def listSum(ls, result):
    if not ls:
        return result
    return listSum(ls[1:], result + ls[0])</code>

Versi ini secara berkesan mengumpul jumlah dalam parameter 'hasil' dan mengembalikannya apabila syarat asas dipenuhi .

Indeks Melewati

Untuk mengelak daripada mencipta senarai perantaraan, kita boleh melepasi indeks elemen semasa:

<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>

Syarat asas menyemak sama ada indeks telah mencapai penghujung senarai.

Versi Fungsi Dalaman

Untuk memudahkan pengendalian parameter, kita boleh mencipta fungsi dalaman untuk mengendalikan rekursi:

<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>

Versi Parameter Lalai

Untuk kesederhanaan, kami boleh menggunakan parameter lalai:

<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>

Atas ialah kandungan terperinci Bagaimana Mengira Secara Rekursif Jumlah Elemen dalam Senarai dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn