Alt du trenger å vite om Recursion In Python



Denne artikkelen vil hjelpe deg med å få en detaljert og omfattende kunnskap om rekursjon i Python. Hvordan det fungerer? og hva er formålet med det?

Med enkle ord er rekursjon en måte å løse problemet på ved å få en funksjon som kaller seg, Ordet “ tilbakevendende ”Stammer fra det latinske verbet“ gjentar seg ”, Som betyr å gjøre om noe. Dette er hva den rekursive funksjonen gjør, den gjør om det samme igjen og igjen, det vil si at det husker seg selv. I denne artikkelen vil vi lære om rekursjon i python. Følgende er temaene som dekkes i denne bloggen:

Hva er rekursjon i Python?

Rekursjon er prosessen med å bestemme noe i form av seg selv. Vi vet at i Python kan enhver funksjon kalle hvilken som helst annen funksjon, en funksjon kan også kalle seg selv. Disse typene funksjoner som kaller seg til den bestemte tilstanden ikke er oppfylt, blir betegnet som rekursive funksjoner.





Recursion-in-Python

hva er marionett i devops

la oss ta noen eksempler for å se hvordan det fungerer. Hvis du får et positivt heltall n, vil faktoriet være.



  • n! = n * (n-1) * (n-2) og så videre.
  • 2! = 2 * (2-1)
  • en! = 1
  • 0! = 0
  • 4! = 4 * 3!
  • 3! = 3 * 2!
  • 2! = 2 * 1!

Å erstatte verdiene ovenfor vil resultere i følgende uttrykk

  • 4! = 4 * 3 * 2 * 1

Vi må definere en funksjon kan si fakta (n) som tar positivt heltall eller 0 som sin parameter og returnerer den nte faktor, hvordan kan vi gjøre det ved å bruke rekursjon?

La oss se, for å gjøre det ved hjelp av rekursjon, må vi undersøke følgende ligning



  • n! = n. (n-1). (n-2) & hellip3.2.1

  • n! = n. (n-1)! # vi kan omskrive utsagnet ovenfor som på denne linjen

  • Nå her, hvis vi passerer 2 som parameter, får vi:

    • 2! = 2,1! = 2

  • Tilsvarende, hvis vi passerer 1, får vi:

  • Men hvis vi passerer 0, går det i stykker

    • 0! = 0. (- 1)! og her er ikke faktoriell for -1 definert, så dette fungerer bare for verdier> 0

  • Så vi må skrive to saker

    • 1. n! = n. (n-1)! hvis n> = 1

    • 2. 1 hvis n = 0

Dette er en komplett løsning for alle positive heltall og 0.

Oppsigelsestilstand

En rekursiv funksjon må oppfylle en viktig forutsetning for å avslutte. Når vi beveger oss mot en tilstand der problemet kan løses uten ytterligere rekursjon, vil en rekursiv funksjon avsluttes, og problemet minimeres i de mindre deltrinnene. En rekursjon kan havne i en uendelig løkke hvis betingelsen for avslutning ikke er oppfylt i samtalene.

Faktiske forhold:

  • faktor av n = n * (n-1) så lenge n er større enn 1.
  • 1 hvis n = 0

Vi vil konvertere de ovennevnte faktorforholdene i python-kode:

def fact (n): hvis n == 1: return n else: return n * fact (n-1)

La oss ta et eksempel, si at vi ønsker å finne en faktor 4:

faktum (4) #dette vil returnere 4 * fakta (3) og så videre til n == 1.
 Produksjon: 24

Den brukes så ofte som et eksempel for rekursjon på grunn av sin enkelhet og klarhet. Å løse mindre forekomster av et problem i hvert trinn som det ble kalt rekursjon i informatikk.

Pythons rekursjonsgrense

På noen språk kan du opprette en uendelig rekursiv sløyfe, men i Python er det en rekursjonsgrense. For å sjekke grensen, kjør følgende funksjon fra sys-modulen. som vil gi grensen for rekursjonssettet for python.

importer sys sys.getrecursionlimit ()
 Produksjon: 1000

Du kan også endre grensen ved hjelp av sys-modulens funksjonsinnstillingsbegrensning () i henhold til dine krav. La oss nå lage en funksjon som kaller seg rekursivt til den overskrider grensen og sjekker hva som skjer:

def rekursiv (): rekursiv () hvis __navn__ == '__main__': rekursiv ()

Hvis du kjører ovennevnte kode, får du et unntak for kjøretid: RuntimeError: maksimal rekursjonsdybde overskredet. Python hindrer deg i å lage en funksjon som ender i en uendelig rekursiv sløyfe.

Flate lister med rekursjon

Andre ting du kan gjøre ved å bruke rekursjon, bortsett fra fakta, la oss si at du vil lage singel fra en liste som er nestet, det kan gjøres ved hjelp av koden nedenfor:

def flat (a_list, flat_list = none): if flat_list is none: flat_list = [] for item in a_list: if isinstance (item, list): flat (item, flat_list) else: flat_list.append (item) return flat_list if __name__ == '__main__': nestet = [1,2,3, [4,5], 6] x = flat (nestet) utskrift (x)
 Produksjon: [1,2,3,4,5,6]

Å kjøre ovennevnte kode vil resultere i en enkelt liste i stedet for heltalliste som inneholder heltalliste som vi brukte som input. Du kan også gjøre det samme på andre måter, Python har noe som heter itertools.chain (). Du kan sjekke koden som brukes til å lage en funksjonskjede (). Det er en annen tilnærming å gjøre det samme som vi gjorde.

konvertere binær til desimal java

Fordeler med rekursjon

  • Koden er ren og elegant i en rekursiv funksjon.

  • En sammensatt oppgave kan brytes ned i enklere delproblemer ved hjelp av rekursjon.

  • Å generere sekvens er lettere med rekursjon enn å bruke noen nestede iterasjoner.

Ulemper ved rekursjon

  • Å følge logikken bak rekursiv funksjon kan være vanskelig noen ganger.

  • Rekursive samtaler er dyre (ineffektive) da de tar mye minne og tid.

  • Rekursive funksjoner er vanskelig å feilsøke.

I denne artikkelen så vi hva rekursjon er, og hvordan kan vi utvikle rekursive funksjoner fra problemstillingen, hvor matematisk en problemstilling kan defineres. Vi løste et problem med faktoria og fant ut forholdene som kreves for å finne fakta som vi kunne konvertere disse forholdene til pythonkode, noe som gir deg forståelse for hvordan rekursjon fungerer. Jeg synes det er pent at Python har en innebygd grense for rekursjon for å hindre utviklere i å lage dårlig konstruerte rekursive funksjoner. En viktig ting å legge merke til er at rekursjon er vanskelig å feilsøke da funksjonen fortsetter å ringe seg selv.