⊗pyPmFnRe 24 of 129 menu

Python-da rekursiýa

Programmirlemede şeýle bir düşünje bar, rekursiýa - funksiýanyň özüni özüni çagyrmagy.

Mysal . Sanyjy bilen ýönekeý rekursiýa

Rekursiýa arkaly 1-den 10-a çenli sanlary çap edeliň:

i = 1 def func(): global i print(i) i += 1 if i <= 10: func() # bu ýerde funksiýa özüni özi çagyryar func()

Geliň, bu kodyň nädip işleýändigini görüşeliň.

Bizde global üýtgeýjän i we func funksiýasy bar, onuň içinde konsola i üýtgeýjäniniň mazmuny çap edilýär, soňra oňa birlik goşulýar.

Eger bizim i üýtgeýjänimiz 10-dan kiçi ýa-da deň bolsa, onda funksiýa gaýtadan çagyrylýar. i üýtgeýjäniň globaldygyna görä, her bir täze funksiýa çagyrylanda onda öňki çagyryşda berlen i üýtgeýjäniniň bahasy bolýar.

Netijede, funksiýa i bolýança özüni özi çagyrmagy dowam etdirer 10-dan uly bolýança.

Üns beriň, bizim mysalda funksiýany if sözsüz işledip bolmaýar - eger etseňiz, onda çäksiz funksiýa çagyrmalary bolup geçer.

Mysal . Bürnük sanaw elementlerini çap etmek üçin rekursiýa

Rekursiýalar köplenç dürli derejeli bürnük sanawlary sanamak üçin ulanylýar. Bizde aşakdaky sanaw bolsun:

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

Geliň ony sanap geçýän funksiýa dözdüreliň. Onda ilki bilen şert bermeli, element primitiw bolsa, ýagny sanawdan alnan ýönekeý san, konsola çap edilmeli. Eger element ýitileşdirilen obyekt bolsa, meselem, bürnük sanaw bolsa, onda bu ýagdaýda funksiýa özüni özi çagyrmaly, ýagny rekursiýa ýüze çykmaly. Elementiň görnüşini barlamak üçin isinstance funksiýasyny ulanarys. Diňe bizim mysalymyz üçin isinstance-niň ilki parametrine el ýazarys, ikinjisine bolsa list görnüşini:

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

Funksiýa çagyrylanda bürnük sanawdaky ähli sanlaryň hatary çap ediler:

func(lst) # 1, 2, ... 8, 9 çap eder

Mysal . Bürnük sanaw elementleri bilen amallar üçin rekursiýa

Rekursiýany bürnük sanawlaryň elementleri bilen dürli amallar üçin hem ulanyp bolýar. Bizde aşakdaky sanaw bolsun:

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

Geliň onuň ähli elementleriniň jemini alalyň. Munuň üçin funksiýada res üýtgeýjänini yglan edeliň, oňa sanlaryň jemi ýygnalar. Şertde ýazalyň, eger element ýitileşdirilen obýekt bolsa, onda ol func funksiýasynyň parametrine düşýär we jeme goşulýar. Bu diýmek, element primitiv bolýança rekursiýada galar. Bu ýagdaýda ol diňe res-da ýazylan jeme goşular:

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

Geliň funksiýany çagyrýalyň we onuň netijesini konsola çap edeliň:

print(func(lst)) # 45 çap eder

Mysal . Sanawda ýygnamak üçin rekursiýa

Rekursiýa kömegi bilen bürnük sanawlary bir ölçegli sanawa ýazyp bolýar. Bizde aşakdaky sanaw bolsun:

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

Geliň funksiýada boş sanaw res ýazalyň, oňa başlangyç sanawyň elementleri ýygnalar. Soňra sikli işledeliň we şert belläliň - eger element sanaw bolsa, onda ol extend metoda düşer. Bu metod bir sanawyň elementlerini ikinji sanawyň ahyryna birikdirýär, ýagny bürnük sanawyň elementleri res sanawyň ahyryna düşer:

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

Ýerine ýetirilen kodyň netijesi:

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

Amaly meseleler

Iňlik derejesi hökmany bolmadyk sözlügiň ähli san elementlerini çap ediň:

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

Öňki mesele sözlüginiň elementleriniň jemini tapyň.

Öňki mesele sözlüginiň primitiw elementleriniň sanawyny alyň.

Türkmen
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkçeЎзбекOʻzbekTiếng Việt
Biz sahypanyň işlemegi, analitika we şahsyýetleşdirmek üçin cookie ulanýarys. Maglumatlaryň işlenişi Gizlinlik syýasaty boýunça amala aşyrylýar.
hemmesini kabul et sazlamak ret et