Rekursive funktioner i Python

I denne vejledning skal vi se Rekursion med eksempler i Python. Rekursion i programmering er en meget kraftfuld teknik, det gøres med funktioner, der kalder sig selv, ser det som en slags loop, da den samme kode vil blive gentaget flere gange, indtil løsningen er nået.

Karakteristika, som en rekursiv funktion skal haveBundkasseDet vil tillade os at afslutte funktionen på et tidspunkt, og at der ikke sker uendelige opkald.
Rekursiv sagI dette tilfælde kalder vi funktionen igen, men vi kommer tættere på løsningen. Det vil se bedre ud i eksemplerne.

BemærkDet er vigtigt at være klar om basissagen og at vide, at den rekursive sag kommer tættere på den og ikke går ind i en tilstand af uendelige opkald, det er en almindelig fejl, når man starter med rekursion.

Lad os komme til eksemplerne, som vil være enkle og korte, så de kan godt assimileres.

Eksempel 1 - Faktorisk


I dette eksempel vil vi løse factorial af et talHvis du vil vide, hvad fabrikken handler om, kan du besøge dette link. Her er koden, og nedenfor forklarer jeg den rekursive funktion.
 def factorial (nummer): if (number == 0 eller nummer == 1): returner 1 else: return number * factorial (number-1) if __name__ == "__main__": try: num = int (input ("From Hvilket tal vil du kende fabrikken til? ")) If (num <0): print (" Tallet skal være større end eller lig med 0 ") else: print (" Faktoralen for ", num," er ", factorial (num)) undtagen: print (" Et nummer forventes ") 
Vores rekursive funktion har basiskassen i if og den rekursive i den anden. Du kan se, at basistasken returnerer et 1, og at dette nås, når parameteren, der sendes til funktionen, er 0 eller 1, når denne sag nås, kalder funktionen ikke igen. I det rekursive tilfælde har vi et kald til funktionen til sig selv, men hvordan kan du se, at parameteren reduceres med 1 (vi kommer tættere på basistasken). Den sidste del af koden uden for funktionen er kun ansvarlig for at bede brugeren om et nummer og kontrollere, at det er større end eller lig med 0 for at kalde funktionen, da fabrikken med negative tal ikke virker.

Hvis vi foretager opkaldet til funktionen med tallet 4, det vil sige factorial (4), har vi følgende opkald:

 Ring 1: factorial (4) Call 2: 4 * factorial (3) Call 3: 3 * factorial (2) Call 4: 2 * factorial (1)
Når du ringer til factorial med 1, er der ikke flere opkald, og det vil returnere 1, så vender denne funktion tilbage resultaterne til den funktion, jeg kalder det, afkastet ville være sådan:
 faktor (1) = 1 faktor (2) = 2 * 1 faktor (3) = 3 * 2 faktor (4) = 4 * 6
Og vi har allerede vores resultat, som er 24, ved at gange tallene: 1 * 2 * 3 * 4. Dernæst efterlader jeg et skærmbillede, når jeg beder om faktorien 5, hvilket ikke er mere end at gange 5 med faktorien 4 (som vi allerede ved er 24), hvilket giver 120 som resultat. Du kan også se, at hvis brugeren indsætter tallet forkert, det er:

Eksempel 2 - Addition / Subtraktion


I dette eksempel sætter jeg en rekursiv funktion til at foretage en addition eller subtraktion, selvfølgelig forekommer dette eksempel normalt ikke i det virkelige liv, men som et eksempel virker det:
 def operere (nummer1, nummer2): hvis (nummer2 == 0): returnummer1 elif (nummer2 <0): returbetjening (nummer1-1, nummer2 + 1) andet: returoperation (nummer1 + 1, nummer2-1) hvis __name__ == "__main__": print ("Tilføjelse af 10 og 3:", betjen (10, 3)) print ("Tilføjelse af 5 og -2:", betjen (5, -2)) 
Her har vi en basistilfælde og 2 rekursive sager, dette er for at vide, hvilken vej vi skal røre ved, da vi afhænger af, om tallet er positivt eller negativt, bliver nødt til at handle anderledes. Betjeningsfunktionen modtager 2 tal, og algoritmen tager sig af at trække fra eller tilføje et til nummer2 og sende det til nummer1 (Hvis nummer2 er positivt, trækker jeg 1 fra nummer2 og tilføjer det til nummer1), så indtil variablen nummer2 er lig til 0.

For eksempel vil vi tilføje 3 + 2 ved at se opkaldene.

 Opkald 1: betjene (3,2) Opkald 2: betjene (4,1) Opkald 3: betjene (5,0)
I dette tilfælde, når vi kommer til at operere (5,0), er der ikke andet at gøre, vi har resultatet direkte (i modsætning til tilfældet med den faktorial, der skulle udføre multiplikationen). Her er resultatet af udførelsen af ​​koden:

BemærkSelvom vi med rekursion har en elegant løsning og normalt kortere, skal den bruges, når vi ikke har nogen anden mulighed, hvis vi kan trække efter dens iterative variant, vil det være et bedre valg, da det bruger mindre hukommelse og normalt er hurtigere.

Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt
wave wave wave wave wave