Recursieve functies in Python

In deze tutorial gaan we de Recursie met voorbeelden in Python. Recursie in programmeren is een zeer krachtige techniek, het wordt gedaan met functies die zichzelf aanroepen, het zien als een soort lus, aangezien dezelfde code meerdere keren wordt herhaald, totdat de oplossing is bereikt.

Kenmerken die een recursieve functie moet hebbenHoofdzaakHet stelt ons in staat om de functie op een gegeven moment te beëindigen en dat er geen oneindige oproepen plaatsvinden.
recursief gevalIn dit geval roepen we de functie opnieuw aan, maar komen we dichter bij de oplossing. In de voorbeelden ziet het er beter uit.

OpmerkingHet is belangrijk om duidelijk te zijn over het basisgeval en om te weten dat het recursieve geval er dichterbij komt en niet in een toestand van oneindige oproepen komt, het is een veel voorkomende fout bij het starten met recursie.

Laten we naar de voorbeelden gaan, die eenvoudig en kort zullen zijn, zodat ze goed kunnen worden verwerkt.

voorbeeld 1 - Faculteit


In dit voorbeeld zullen we los de faculteit van een getal opAls je wilt weten waar de faculteit over gaat, bezoek dan deze link. Hier is de code, en hieronder leg ik de recursieve functie uit.
 def faculteit (getal): if (getal == 0 of getal == 1): retourneer 1 else: retourneer getal * faculteit (getal-1) if __name__ == "__main__": probeer: num = int (invoer ("Van Van welk getal wil je de faculteit weten? ")) if (num <0): print (" Het getal moet groter dan of gelijk zijn aan 0 ") else: print (" De faculteit van ", num," is ", faculteit (num )) behalve: print ("Er wordt een getal verwacht") 
Onze recursieve functie heeft het basisgeval in de if en de recursieve in de else. U kunt zien dat het basisgeval een 1 retourneert en dat dit wordt bereikt wanneer de parameter die aan de functie is doorgegeven 0 of 1 is, wanneer dit geval wordt bereikt, roept de functie niet opnieuw aan. In het recursieve geval hebben we een aanroep van de functie naar zichzelf, maar hoe kun je zien dat de parameter met 1 wordt verminderd (we komen dichter bij het basisgeval). Het laatste deel van de code buiten de functie is alleen verantwoordelijk voor het vragen van de gebruiker om een ​​getal en het controleren of het groter dan of gelijk is aan 0 om de functie aan te roepen, aangezien de faculteit met negatieve getallen niet werkt.

Als we de functie aanroepen met het nummer 4, dat wil zeggen faculteit (4), hebben we de volgende aanroepen:

 Oproep 1: faculteit (4) Oproep 2: 4 * faculteit (3) Oproep 3: 3 * faculteit (2) Oproep 4: 2 * faculteit (1)
Bij het aanroepen van faculteit met 1, zijn er geen aanroepen meer en het zal 1 teruggeven, dan retourneert deze functie de resultaten terug naar de functie die ik het noem, de terugkeer zou als volgt zijn:
 faculteit (1) = 1 faculteit (2) = 2 * 1 faculteit (3) = 3 * 2 faculteit (4) = 4 * 6
En we hebben al ons resultaat, dat is 24, door de getallen te vermenigvuldigen: 1 * 2 * 3 * 4. Vervolgens laat ik een screenshot achter als ik om de faculteit van 5 vraag, wat niets meer is dan 5 vermenigvuldigen met de faculteit van 4 (waarvan we al weten dat het 24 is) en als resultaat 120. Je kunt ook zien dat als de gebruiker het nummer invult fout, het is:

Voorbeeld 2 - Optellen / aftrekken


In dit voorbeeld heb ik een recursieve functie gezet om een ​​optelling of aftrekking te maken, dit voorbeeld komt natuurlijk meestal niet voor in het echte leven, maar als voorbeeld werkt het:
 def operate (getal1, cijfer2): if (getal2 == 0): return number1 elif (getal2 <0): return operate (getal1-1, cijfer2 + 1) else: return operate (getal1 + 1, cijfer2-1) if __name__ == "__main__": print ("Toevoegen 10 en 3:", bedienen (10, 3)) print ("Toevoegen 5 en -2:", bedienen (5, -2)) 
Hier hebben we een basisgeval en 2 recursieve gevallen, dit is om te weten op welke manier we moeten aanraken, want afhankelijk van of het getal positief of negatief is, zullen we anders moeten handelen. De bedieningsfunctie ontvangt 2 getallen en het algoritme zorgt voor het aftrekken of optellen van een bij nummer 2 en doorgeven aan nummer 1 (als nummer 2 positief is, trek ik 1 af van nummer 2 en tel ik het op bij nummer 1), dus totdat de variabele nummer 2 gelijk is naar 0.

We gaan bijvoorbeeld 3 + 2 toevoegen als we de oproepen zien.

 Oproep 1: bedienen (3,2) Oproep 2: bedienen (4,1) Oproep 3: bedienen (5,0)
In dit geval, als we gaan werken (5,0), is er niets anders te doen, we hebben het resultaat direct (in tegenstelling tot in het geval van de faculteit die de vermenigvuldiging moest doen). Hier is het resultaat van het uitvoeren van de code:

OpmerkingHoewel we met recursie een elegante oplossing hebben en normaal gesproken korter, zou het moeten worden gebruikt als we geen andere optie hebben, als we de iteratieve variant ervan kunnen gebruiken, is het een betere keuze, omdat het minder geheugen verbruikt en meestal sneller is.

Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven
wave wave wave wave wave