⊗pyPmFnRe 24 of 129 menu

Rekursi dalam Python

Dalam pengaturcaraan, terdapat konsep yang dipanggil rekursi - apabila fungsi memanggil dirinya sendiri.

Contoh . Rekursi mudah dengan pembilang

Mari kita output nombor dari 1 hingga 10 menggunakan rekursi:

i = 1 def func(): global i print(i) i += 1 if i <= 10: func() # di sini fungsi memanggil dirinya sendiri func()

Mari kita bincangkan bagaimana kod ini berfungsi.

Kami mempunyai pembolehubah global i dan fungsi func, di dalamnya kandungan pembolehubah i dipaparkan ke konsol, dan kemudian satu ditambah kepadanya.

Jika pembolehubah kami i kurang daripada atau sama dengan 10, maka fungsi dipanggil sekali lagi. Oleh kerana pembolehubah i - global, maka pada setiap panggilan fungsi baru ia akan mempunyai nilai pembolehubah i yang ditetapkan pada panggilan sebelumnya.

Hasilnya, fungsi akan memanggil dirinya sendiri sehingga i menjadi lebih besar daripada 10.

Perhatikan bahawa dalam kes kami, fungsi tidak boleh dijalankan tanpa if - jika ini dilakukan, panggilan fungsi tak terhingga akan terhasil.

Contoh . Rekursi untuk output elemen senarai bersarang

Rekursi paling kerap digunakan untuk menghuraikan senarai dengan tahap sarangan yang berbeza. Katakan kami mempunyai senarai berikut:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Mari kita buat fungsi yang akan menghuraikannya. Di dalamnya, pertama sekali perlu menetapkan syarat supaya elemen yang merupakan primitif, iaitu nombor yang hanya diekstrak dari senarai, dipaparkan ke konsol. Dan jika elemen itu adalah objek kompleks, contohnya, senarai bersarang, maka dalam kes ini biarkan fungsi memanggil dirinya sendiri, iaitu rekursi akan berlaku. Untuk menyemak jenis elemen, kami menggunakan fungsi isinstance. Hanya untuk contoh kami, dalam parameter pertama isinstance kami tulis el, dan yang kedua - jenis list:

def func(lst): for el in lst: if isinstance(el, list): func(el) else: print(el)

Apabila fungsi dipanggil, semua nombor dari senarai bersarang akan dipaparkan:

func(lst) # akan output 1, 2, ... 8, 9

Contoh . Rekursi untuk operasi dengan elemen senarai bersarang

Rekursi juga boleh digunakan untuk pelbagai operasi dengan elemen senarai bersarang. Katakan kami mempunyai senarai berikut:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Mari kita dapatkan jumlah semua elemennya. Untuk melakukan ini, dalam fungsi isytiharkan pembolehubah res, di mana jumlah nombor akan terkumpul. Dalam syarat, tulis bahawa jika elemen adalah objek kompleks, maka ia masuk ke dalam parameter fungsi func dan ditambah kepada jumlah. Ini bermakna elemen akan berada dalam rekursi sehingga ia menjadi primitif. Dan dalam kes ini, ia hanya akan ditambah kepada jumlah yang ditulis dalam res:

def func(lst): res = 0 for el in lst: if isinstance(el, list): res += func(el) else: res += el return res

Mari kita panggil fungsi dan output hasilnya ke konsol:

print(func(lst)) # akan output 45

Contoh . Rekursi untuk pengumpulan ke dalam senarai

Menggunakan rekursi, anda boleh menguraikan senarai bersarang kepada satu senarai satu dimensi. Katakan kami mempunyai senarai berikut:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Mari kita tulis dalam fungsi senarai kosong res, di mana elemen senarai asal akan terkumpul. Seterusnya, jalankan gelung dan tetapkan syarat - jika elemen adalah senarai, maka ia akan masuk ke dalam kaedah extend. Kaedah ini menyambungkan elemen satu senarai ke hujung kedua senarai, iaitu elemen senarai bersarang akan masuk ke hujung senarai res:

def func(lst): res = [] for el in lst: if isinstance(el, list): res.extend(func(el)) else: res.append(el) return res print(func(lst))

Hasil kod yang dilaksanakan:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

Tugas Praktikal

Output semua elemen berangka kamus dengan tahap sarangan sewenang-wenangnya:

{ 'a': { 'b': 1, 'c': 2, 'd': { 'e': 3, 'f': 4 } }, 'j': { 'h': 5, 'k': 6, }, 'l': 7 }

Cari jumlah elemen kamus dari tugas sebelumnya.

Dapatkan senarai elemen primitif kamus dari tugas sebelumnya.

Melayu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan kuki untuk operasi laman web, analisis dan personalisasi. Pemprosesan data dijalankan mengikut Polisi Kerahsiaan.
terima semua tataletak tolak