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

Bagaimana Mengira Secara Rekursif Jumlah Elemen dalam Senarai dalam Python?

Mary-Kate Olsen
Lepaskan: 2024-10-21 12:50:31
asal
619 orang telah melayarinya

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([])))))
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan