rekursive funksjoner er funksjoner som kaller seg i deres definisjon . Fordi en rekursiv funksjon kaller på seg til å utføre sin oppgave , kan det gjøre jobber som inneholder identiske arbeid på flere data objekter lettere å konseptualisere , planlegge og skrive. Imidlertid kan rekursjon være system -intensive eller ende opp overbelastning av systemet hvis rekursjon ikke stoppe. Skrive rekursive funksjoner i Python er lik ved hjelp av rekursive funksjoner i andre programmeringsspråk , med de samme fordelene og fallgruvene . Eksempel på Recursion
rekursive funksjoner kaller seg selv som en del av deres definisjon . For eksempel : en
>>> def faktor ( x ) : en
. . . factor ( x )
Denne funksjonen vil fortsette å kalle seg frem til systemet ikke lenger kan holde mengden av funksjon kaller gjort ( funksjonskall ligge i minnet som alle andre data) . Men forenkler denne hvordan en rekursive funksjoner arbeider konseptuelt : En funksjon (faktor ) kaller seg (faktor ( x ) ) som en del av sin definisjon
Base Cases
. En rekursiv funksjon må ha det som kan kalles " basen saker", eller tilstander som forteller funksjonen til å stoppe sin rekursjon . Dette kan være en hvilken som helst tilstand som funksjonen kunne ha tilfreds som en del av sin drift. Som et klassisk eksempel , finner fakultetet funksjon fakultet til et tall n ( n! , eller n * n - 1 * n- 2 ... 0 ) . Så fakultetet av tre ville beregne til 3 * 2 * 1 = 6 . En programmerer kan bruke nummeret 0 som base case av denne funksjonen : en
>>> hvis x == 0 : en
. . . returnere en
Rekursjon
p Hvis fakultetet funksjon nå har en base case ( x == 0 ) , deretter rekursjon vil stoppe på denne tilstanden . Så , ville det bare være et spørsmål om å bruke rekursjon til å utføre fakultetet drift : en
>>> annet : en
. . . Avkastningen x * faktor ( x - 1 )
p Hvis x ikke lik 0 , så rekursjon vil begynne /fortsette. Avkastningen uttalelse vil kalle " faktor " og vent . Hver ny funksjon samtale vil gjøre det samme , ringer og venter til siste funksjon samtale (når x == 0 ) returnerer en . Deretter vil hver forrige samtale fullføre avkastningen uttalelse ( multiplisere den returnerte verdien fra " faktor " av x ) til fakultetet er returnert .
Python Rekursjon
Rekursjon i alle språk kan ende opp i en uendelig loop : det vil si, en rekursiv struktur som aldri tar slutt før systemet stopper det på grunn av mangel på ressurser. Python stopper denne " uendelig " rekursjon på 1000 samtaler ( slik at en funksjon kan kalle seg i en 1000 instans lange rekursive kjeden før Python stopper prosessen ) . Programmereren kan endre denne verdien gjennom system-biblioteker , slik som dette eksemplet : en
>>> import sys
>>> sys.setrecursionlimit ( 2000 )
Men på det punktet programmerere kan spørre seg selv om rekursjon er den beste løsningen på problemet .