Rekursive funksjoner i Python

I denne opplæringen skal vi se Rekursjon med eksempler i Python. Rekursjon i programmering er en veldig kraftig teknikk, det gjøres med funksjoner som kaller seg selv, ser det som en slags sløyfe, siden den samme koden vil gjentas flere ganger, til løsningen er nådd.

Kjennetegn som en rekursiv funksjon må haGrunnveskeDet vil tillate oss å avslutte funksjonen på et tidspunkt, og at uendelige samtaler ikke forekommer.
Rekursiv sakI dette tilfellet kaller vi funksjonen igjen, men vi kommer nærmere løsningen. Det vil se bedre ut i eksemplene.

MerkDet er viktig å være tydelig om basistilfellet og å vite at det rekursive tilfellet nærmer seg det og ikke går inn i en tilstand med uendelige samtaler, det er en vanlig feil når man starter med rekursjon.

La oss gå ned til eksemplene, som vil være enkle og korte, slik at de kan godt assimileres.

Eksempel 1 - Faktorisk


I dette eksemplet vil vi løse faktoren til et tallHvis du vil vite hva fabrikken handler om, kan du gå til denne lenken. Her er koden, og nedenfor forklarer jeg den rekursive funksjonen.
 def factorial (tall): if (number == 0 eller number == 1): returner 1 annet: returnummer * factorial (nummer-1) hvis __name__ == "__main__": prøv: num = int (input ("From Hvilket tall vil du vite faktoren om? ")) If (num <0): print (" Tallet må være større enn eller lik 0 ") else: print (" The factorial of ", num," is ", factorial (num)) unntatt: print (" Et tall forventes ") 
Vår rekursive funksjon har grunnfallet i if og den rekursive i den andre. Du kan se at hovedtilfellet returnerer a 1 og at dette nås når parameteren som sendes til funksjonen er 0 eller 1, når denne saken er nådd, ringer funksjonen ikke igjen. I det rekursive tilfellet har vi et kall av funksjonen til seg selv, men hvordan kan du se å redusere parameteren med 1 (vi kommer nærmere basiskassen). Den siste delen av koden utenfor funksjonen er bare ansvarlig for å be brukeren om et tall og kontrollere at det er større enn eller lik 0 for å ringe funksjonen, siden fabrikken med negative tall ikke fungerer.

Hvis vi ringer til funksjonen med tallet 4, det vil si factorial (4), har vi følgende samtaler:

 Call 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 det ikke flere anrop, og den vil returnere 1, så returnerer denne funksjonen resultatene tilbake til funksjonen som jeg kaller det, returen vil være slik:
 faktor (1) = 1 faktor (2) = 2 * 1 faktor (3) = 3 * 2 faktor (4) = 4 * 6
Og vi har allerede vårt resultat, som er 24, fra å multiplisere tallene: 1 * 2 * 3 * 4. Deretter legger jeg igjen et skjermbilde når jeg ber om faktor 5, som ikke er annet enn å multiplisere 5 med faktor 4 (som vi allerede vet er 24) som gir 120 som et resultat. Du kan også se at hvis brukeren setter inn tallet feil, det er:

Eksempel 2 - Addisjon / subtraksjon


I dette eksemplet setter jeg en rekursiv funksjon for å gjøre en addisjon eller subtraksjon, selvfølgelig forekommer dette eksemplet vanligvis ikke i det virkelige liv, men som et eksempel fungerer det:
 def operere (nummer1, nummer2): hvis (tall2 == 0): returnummer1 elif (nummer2 <0): returoperere (tall1-1, nummer2 + 1) annet: returoperasjon (nummer1 + 1, nummer2-1) hvis __name__ == "__main__": print ("Legger til 10 og 3:", operer (10, 3)) print ("Legger til 5 og -2:", opererer (5, -2)) 
Her har vi et basistilfelle og 2 rekursive saker, dette er å vite hvilken vei vi skal berøre, siden avhengig av om tallet er positivt eller negativt, må vi handle annerledes. Operasjonsfunksjonen mottar 2 tall, og algoritmen vil ta seg av å trekke fra eller legge til et til nummer2 og sende det til nummer1 (Hvis tall2 er positivt, trekker jeg 1 fra tall2 og legger det til nummer1), så til variabelen nummer2 er lik til 0.

For eksempel skal vi legge til 3 + 2 når vi ser samtalene.

 Ring 1: operer (3,2) Ring 2: betjen (4,1) Ring 3: betjen (5,0)
I dette tilfellet, når vi kommer til å operere (5,0), er det ikke noe annet å gjøre, vi har resultatet direkte (i motsetning til i tilfellet med den faktorielle som måtte gjøre multiplikasjonen). Her er resultatet av utførelsen av koden:

MerkSelv om vi med rekursjon har en elegant løsning og normalt kortere, bør den brukes når vi ikke har noe annet alternativ, men hvis vi kan trekke etter den iterative varianten, vil det være et bedre valg, siden den bruker mindre minne og vanligvis er raskere.

Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave