⊗pyPmFnRe 24 of 129 menu

Rekursi di Python

Dalam pemrograman, ada konsep yang disebut rekursi - ketika suatu fungsi memanggil dirinya sendiri.

Contoh . Rekursi sederhana dengan pencacah

Mari kita tampilkan angka 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 bahas bagaimana kode ini bekerja.

Kita memiliki variabel global i dan fungsi func, di dalamnya kandungan variabel i ditampilkan ke konsol, kemudian ditambah dengan satu.

Jika variabel kita i kurang dari atau sama dengan 10, maka fungsi dipanggil ulang. Karena variabel i - global, maka pada setiap pemanggilan fungsi baru, di dalamnya akan terdapat nilai variabel i yang ditetapkan pada pemanggilan sebelumnya.

Hasilnya, fungsi akan memanggil dirinya sendiri hingga i menjadi lebih besar dari 10.

Perhatikan, bahwa dalam kasus kita, fungsi tidak bisa dijalankan tanpa if - jika ini dilakukan, maka akan terjadi pemanggilan fungsi tak terbatas.

Contoh . Rekursi untuk menampilkan elemen dari daftar bersarang

Rekursi paling sering digunakan untuk menelusuri daftar dengan berbagai tingkat penyarangan. Misalkan kita memiliki daftar berikut:

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

Mari kita buat fungsi yang akan menelusurinya. Di dalamnya, pertama-tama perlu ditetapkan kondisi, sehingga elemen, yang merupakan primitif, yaitu angka yang diambil begitu saja dari daftar, ditampilkan ke konsol. Dan jika elemen tersebut merupakan objek, misalnya, daftar bersarang, maka dalam kasus ini biarkan fungsi memanggil dirinya sendiri, yaitu terjadi rekursi. Untuk memeriksa tipe elemen, kita akan menggunakan fungsi isinstance. Hanya untuk contoh kita, di parameter pertama isinstance kita tulis el, dan yang kedua - tipe list:

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

Saat fungsi dipanggil, akan ditampilkan serangkaian semua angka dari daftar bersarang:

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

Contoh . Rekursi untuk operasi dengan elemen daftar bersarang

Rekursi juga dapat diterapkan untuk berbagai operasi dengan elemen daftar bersarang. Misalkan kita memiliki daftar berikut:

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

Mari kita dapatkan jumlah semua elemennya. Untuk itu, dalam fungsi deklarasikan variabel res, ke dalamnya akan diakumulasikan jumlah angka. Dalam kondisi, tuliskan bahwa jika elemen merupakan objek kompleks, maka ia masuk sebagai parameter fungsi func dan ditambahkan ke jumlah. Ini berarti elemen akan berada dalam rekursi hingga menjadi primitif. Dan dalam kasus ini, ia hanya akan ditambahkan ke jumlah, yang tertulis di 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 tampilkan hasilnya di konsol:

print(func(lst)) # akan menampilkan 45

Contoh . Rekursi untuk akumulasi ke dalam daftar

Dengan rekursi, Anda dapat menguraikan daftar bersarang menjadi satu daftar satu dimensi. Misalkan kita memiliki daftar berikut:

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

Mari kita tulis dalam fungsi sebuah daftar kosong res, ke dalamnya akan diakumulasikan elemen dari daftar asli. Selanjutnya jalankan loop dan tetapkan kondisi - jika elemen adalah sebuah daftar, maka ia akan masuk ke metode extend. Metode ini menggabungkan elemen dari satu daftar ke akhir daftar kedua, yaitu elemen dari daftar bersarang akan masuk ke akhir daftar 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 dari kode yang dijalankan:

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

Tugas Praktis

Tampilkan semua elemen numerik dari kamus dengan tingkat penyarangan arbitrer:

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

Carilah jumlah elemen dari kamus pada tugas sebelumnya.

Dapatkan daftar elemen primitif dari kamus pada tugas sebelumnya.

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