⊗pyPmFnRe 24 of 129 menu

Rekursiya Python-da

Proqramlasdirmeda rekursiya anlayisi var - bu zaman funksiya ozunu cagirir.

Misal . Saygac ile sadə rekursiya

Gelin rekursiya vasitesi ile 1-den 10-a qeder reqemleri cek edek:

i = 1 def func(): global i print(i) i += 1 if i <= 10: func() # burada funksiya ozunu cagirir func()

Gelin bu kodun necə işlediyini mueyyen edek.

Bizim qlobal deyişen i ve func funksiyasi var, onun daxilinde i deyişeninin deyeri konsola cek edilir ve sonra ona bir vahid elave olunur.

Eger bizim i deyişenimiz 10-dan kicik ve ya beraber olarsa, onda funksiya yeniden cagirilir. i deyişeni qlobal olduğu üçün her yeni funksiya cagrisinda onda evvelki cagrıda teyin olunmuş i deyeri olacaq.

Beləlikle, funksiya i 10-dan boyuk olana qeder ozunu cagirmağa davam edecek.

Nezere alin ki, bizim veziyyetde funksiyani if olmadan işe salmaq olmaz - eks halda sonsuz funksiya cagrisi alınar.

Misal . Ice salinmiş siyahilarin elementlerini cek etmek üçün rekursiya

Rekursiyalar en cox muxtelif derinlikdeki siyahilari neqrib etmek üçün tetbiq olunur. Tutaq ki, bizim asagidaki siyahimiz var:

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

Gelin onu neqrib edecek funksiya yaradaq. Onda evvelce element primitiv olarsa, yeni siyahiden cixarilan sadə reqem olarsa, konsola cekilsin. Ve eger element murekkeb obyektdirse, meselen, ice salinmiş siyahidirse, onda bu veziyyetde funksiya ozunu cagirsin, yeni rekursiya bas versin. Elementin tipini yoxlamaq üçün isinstance funksiyasini tetbiq edek. Yalnız bizim misal üçün isinstance-in birinci parametrinde el yazaq, ikincisinde isə - list tipi:

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

Funksiyani cagirdiqda ice salinmiş siyahinin butun reqemleri sira ile cekilecek:

func(lst) # 1, 2, ... 8, 9 cekedecek

Misal . Ice salinmiş siyahilarin elementleri ile emeliyyatlar üçün rekursiya

Rekursiyalari ice salinmiş siyahilarin elementleri ile muxtelif emeliyyatlar üçün de tetbiq etmek olar. Tutaq ki, bizim asagidaki siyahimiz var:

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

Gelin onun butun elementlerinin cemin alaq. Bunun üçün funksiyada res deyişenini teyin edek, ona reqemlerin cemi yığılacaq. Serte yazaq ki, eger element murekkeb obyektdirse, onda o func funksiyasinin parametrinde olacaq ve ceme elave olunacaq. Bu o demekdir ki, element primitiv olana qeder rekursiyada qalacaq. Ve bu veziyyetde o sadəcə res-de yazılan ceme elave olunacaq:

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

Gelin funksiyani cagiraq ve onun neticesini konsola cekek:

print(func(lst)) # 45 cekedecek

Misal . Siyahida yığmaq üçün rekursiya

Rekursiya vasitesi ile ice salinmiş siyahilari bir bir olculu siyahida aça bilerik. Tutaq ki, bizim asagidaki siyahimiz var:

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

Gelin funksiyada bos siyahi res teyin edek, ona ilkin siyahinin elementleri yığılacaq. Daha sonra dövru işe salaq ve serte - eger element siyahidirse, onda o extend metoduna düşsün. Bu metod bir siyahinin elementlerini ikinci siyahinin sonuna birleşdirir, yeni ice salinmiş siyahinin elementleri res siyahisinin sonuna düşecek:

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

Yerine yetirilmiş kodun neticesi:

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

Praktiki meseler

Ixtiyari derinlikdeki lugetin butun reqemsal elementlerini cek edin:

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

Evvelki meselenin lugetinin elementlerinin cemi tapın.

Evvelki meselenin lugetinin primitiv elementlerinin siyahisini alın.

Azərbaycan
AfrikaansБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Biz saytin işi, analitika və fərdiləşdirmə üçün cookie istifadə edirik. Məlumatların emalı Məxfilik Siyasəti əsasında həyata keçirilir.
hamısını qəbul et konfiqurasiya et rədd et