rekursiva funktioner är funktioner som kallar sig i sin definition . Eftersom en rekursiv funktion kallar sig själv för att utföra sin uppgift , kan det göra jobb som innehåller identiska arbete på flera dataobjekt lättare att konceptualisera , planera och skriva . Däremot kan rekursion vara systemet - intensiva eller hamna överbelasta systemet om rekursion inte stannar . Skriva rekursiva funktioner i Python är ungefär som att använda rekursiva funktioner i andra programmeringsspråk , med samma fördelar och fallgropar . Sample Recursion
rekursiva funktioner kallar sig själva som en del av sin definition . Till exempel :
>>> def faktor ( x ) :
. . . faktor ( x ) katalog
Denna funktion kommer att fortsätta att kalla sig tills systemet inte längre kan hålla mängden funktionsanrop gjort ( funktionsanrop bor i minnet som alla andra uppgifter ) . Dock förenklar hur en rekursiv funktion fungerar konceptuellt : En funktion ( faktor ) kallar sig ( faktor ( x ) ) som en del av sin definition
basfallen . En rekursiv funktion måste ha vad som kan kallas " basfallen , " eller villkor som berättar funktionen för att stoppa dess rekursion . Detta kan vara något villkor att funktionen skulle ha uppfyllt som en del av sin verksamhet . Som ett klassiskt exempel , finner faktoriella funktion fakulteten av ett tal n ( n! , eller n * n- 1 * n- 2 ... 0 ) . Så fakulteten av 3 skulle beräkna till 3 * 2 * 1 = 6 . En programmerare kan använda siffrorna 0 som basfall av denna funktion :
>>> Om x == 0 :
. . . tillbaka 1
rekursion
Om faktoriell funktionen nu har ett basfall ( x == 0 ) , då rekursion kommer att stanna vid detta tillstånd . Så skulle det bara vara en fråga om att använda rekursion för att utföra faktoriell operationen :
>>> annanstans :
. . . avkastning x * faktor ( x - 1 ) katalog p Om x inte är lika med 0 , då rekursion börjar /fortsätter . Avkastningen uttalande kallar " faktor " och vänta . Varje ny funktionsanrop kommer att göra detsamma , ringer och väntar till sista funktionen samtal (när x == 0 ) returnerar 1 . Därefter kommer varje tidigare samtal avsluta return ( multiplicera det returnerade värdet från " faktor " med x ) tills fakultet returneras . Addera Python rekursion
rekursion i något språk kan hamna i en oändlig loop : det är en rekursiv struktur som aldrig tar slut förrän systemet slutar det på grund av bristande resurser . Python stoppar denna " oändlig" rekursion vid 1000 samtal ( så en funktion anropa sig själv i en 1000 instans - lång rekursiv kedjan innan Python stoppar processen ) . Programmeraren kan ändra detta värde genom systemet biblioteken , som följande exempel :
>>> import sys
>>> sys.setrecursionlimit ( 2000 ) katalog
Men på den punkten programmerare kan fråga sig om rekursion är den bästa lösningen på problemet .