⊗pyPmFnRe 24 of 129 menu

Rekursion i Python

Inom programmering finns det ett koncept som kallas rekursion - när en funktion anropar sig själv.

Exempel . Enkel rekursion med räknare

Låt oss skriva ut tal från 1 till 10 med hjälp av rekursion:

i = 1 def func(): global i print(i) i += 1 if i <= 10: func() # här anropar funktionen sig själv func()

Låt oss diskutera hur den här koden fungerar.

Vi har en global variabel i och en funktion func, inuti vilken innehållet i variabeln i skrivs ut till konsolen, och sedan ökas den med ett.

Om vår variabel i är mindre eller lika med 10, anropas funktionen igen. Eftersom variabeln i är global, kommer den vid varje nytt anrop av funktionen ha det värde som satts vid föregående anrop av variabeln i.

Resultatet blir att funktionen kommer att anropa sig själv tills i blir större än 10.

Tänk på att i vårt fall kan funktionen inte startas utan if - om man gör det blir det ett oändligt anrop av funktioner.

Exempel . Rekursion för att skriva ut element i nästlade listor

Rekursion används oftast för att gå igenom listor med olika nivåer av nästling. Låt oss säga att vi har följande lista:

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

Låt oss skapa en funktion som går igenom den. I den behöver vi först sätta ett villkor så att elementet som är en primitiv, d.v.s. bara ett tal extraherat från listan, skrivs ut till konsolen. Och om elementet är ett objekt, till exempel en nästlad lista, låt i det fallet funktionen anropa sig själv, d.v.s. en rekursion sker. För att kontrollera typ av element använder vi funktionen isinstance. Bara för vårt exempel i den första parametern isinstance skriver vi el, och den andra - typen list:

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

När funktionen anropas kommer en rad med alla tal från den nästlade listan att skrivas ut:

func(lst) # skriver ut 1, 2, ... 8, 9

Exempel . Rekursion för operationer med element i nästlade listor

Rekursion kan också användas för olika operationer med element i nästlade listor. Låt oss säga att vi har följande lista:

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

Låt oss få summan av alla dess element. För att göra detta, deklarera en variabel res i funktionen, i vilken summan av talen kommer ackumuleras. I villkoret skriver vi att om elementet är ett komplext objekt, så hamnar det i funktionsparametern func och adderas till summan. Det betyder att elementet kommer att vara i rekursion tills det blir en primitiv. Och i det fallet kommer det bara att adderas till summan som skrivs i res:

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

Låt oss anropa funktionen och skriva ut dess resultat till konsolen:

print(func(lst)) # skriver ut 45

Exempel . Rekursion för ackumulering till en lista

Med hjälp av rekursion kan man lägga ut nästlade listor i en enda endimensionell lista. Låt oss säga att vi har följande lista:

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

Låt oss skriva en tom lista res i funktionen, i vilken element från originallistan kommer ackumuleras. Sedan startar vi en loop och sätter ett villkor - om elementet är en lista, så hamnar det i metoden extend. Denna metod fäster element från en lista i slutet av en andra lista, d.v.s. element från den nästlade listan hamnar i slutet av listan 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))

Resultatet av den utförda koden:

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

Praktiska uppgifter

Skriv ut alla numeriska element i en ordbok med godtycklig nivå av nästling:

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

Hitta summan av elementen i ordboken från föregående uppgift.

Få en lista med primitiva element i ordboken från föregående uppgift.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa