⊗pyPmFnRe 24 of 129 menu

Recursie in Python

In programmeren bestaat het concept recursie - wanneer een functie zichzelf aanroept.

Voorbeeld . Eenvoudige recursie met teller

Laten we met behulp van recursie getallen van 1 tot 10 weergeven:

i = 1 def func(): global i print(i) i += 1 if i <= 10: func() # hier roept de functie zichzelf aan func()

Laten we bespreken hoe deze code werkt.

We hebben een globale variabele i en een functie func, waarin de inhoud van de variabele i naar de console wordt uitgevoerd, en er vervolgens één wordt bij opgeteld.

Als onze variabele i kleiner dan of gelijk aan 10 is, wordt de functie opnieuw aangeroepen. Omdat de variabele i globaal is, zal bij elke nieuwe aanroep van de functie de waarde van de variabele i, ingesteld tijdens de vorige aanroep, erin zitten.

Het resultaat is dat de functie zichzelf zal blijven aanroepen totdat i groter wordt dan 10.

Houd er rekening mee dat het in ons geval niet mogelijk is de functie te starten zonder if - als dit wordt gedaan, resulteert dit in een oneindige aanroep van functies.

Voorbeeld . Recursie voor het weergeven van elementen van geneste lijsten

Recursie wordt het meest gebruikt voor het doorlopen van lijsten met verschillende nestingsniveaus. Stel we hebben de volgende lijst:

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

Laten we een functie maken die deze doorloopt. Er moet eerst een voorwaarde worden gesteld, zodat het element dat een primitief is, d.w.z. simpelweg een uit de lijst gehaald getal, naar de console wordt uitgevoerd. En als het element een object is, bijvoorbeeld een geneste lijst, laat de functie in dat geval zichzelf aanroepen, d.w.z. er treedt recursie op. Om het type element te controleren gebruiken we de functie isinstance. Alleen voor ons voorbeeld schrijven we in de eerste parameter van isinstance el, en als tweede - het type list:

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

Bij het aanroepen van de functie wordt een reeks van alle getallen uit de geneste lijst weergegeven:

func(lst) # geeft 1, 2, ... 8, 9 weer

Voorbeeld . Recursie voor bewerkingen met elementen van geneste lijsten

Recursie kan ook worden gebruikt voor verschillende bewerkingen met elementen van geneste lijsten. Stel we hebben de volgende lijst:

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

Laten we de som van al zijn elementen verkrijgen. Declareer hiervoor in de functie een variabele res, waarin de som van de getallen wordt opgehoopt. Stel in de voorwaarde dat als het element een complex object is, het in de parameter van de functie func terechtkomt en wordt opgeteld bij de som. Dit betekent dat het element in recursie blijft totdat het een primitief wordt. En in dat geval wordt het simpelweg opgeteld bij de som, geschreven in res:

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

Laten we de functie aanroepen en het resultaat ervan naar de console uitvoeren:

print(func(lst)) # geeft 45 weer

Voorbeeld . Recursie voor accumulatie in een lijst

Met behulp van recursie kunnen geneste lijsten worden uitgevouwen tot één ééndimensionale lijst. Stel we hebben de volgende lijst:

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

Laten we in de functie een lege lijst res declareren, waarin de elementen van de oorspronkelijke lijst worden opgehoopt. Start vervolgens een lus en stel een voorwaarde - als het element een lijst is, komt het terecht in de methode extend. Deze methode voegt de elementen van de ene lijst toe aan het einde van de tweede lijst, d.w.z. de elementen van de geneste lijst komen aan het einde van de lijst res terecht:

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

Het resultaat van de uitgevoerde code:

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

Praktische opdrachten

Geef alle numerieke elementen weer van een woordenboek met een willekeurig nestingsniveau:

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

Bereken de som van de elementen van het woordenboek uit de vorige opdracht.

Verkrijg een lijst met de primitieve elementen van het woordenboek uit de vorige opdracht.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren