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."
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.
<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.
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 .
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.
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>
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!