Recursieve functies zijn functies die zichzelf in hun definitie noemen. Omdat een recursieve functie zelf haar taak uit te voeren verzoekt, kan het maken van banen die identieke werk op meerdere gegevensobjecten makkelijker bevatten te conceptualiseren, te plannen en te schrijven. Recursie kan echter worden systeem-intensieve of eindigen overbelasting van het systeem als de recursie niet stopt. Het schrijven van recursieve functies in Python is vergelijkbaar met het gebruik van recursieve functies in andere programmeertalen, met de zelfde voordelen en valkuilen.
Monster recursie
Recursieve functies noemen zichzelf als onderdeel van hun definitie. Bijvoorbeeld:
def factor(x):
... factor(x)
Deze functie zal blijven aandringen zich totdat het systeem kan niet langer de hoeveelheid functieoproepen (functie oproepen zich in geheugen als geen andere gegevens bevinden). Echter, dit vereenvoudigt hoe een recursieve functies werken conceptueel: een functie (factor) noemt zichzelf (factor(x)) als onderdeel van de definitie.
Basis gevallen
Een recursieve functie moet hebben wat genoemd zou kunnen worden "base gevallen", of omstandigheden die de functie om te stoppen met haar recursie vertellen. Dit zou iedere omstandigheid die de functie kon voldaan als onderdeel van haar operatie. Als een klassiek voorbeeld, de faculteitsfunctie vindt de faculteit van een getal n (n!, of n n-1 n-2... 0). zodat de faculteit van 3 zou berekenen tot 3 2 1 = 6. Een programmeur kan gebruik maken van het cijfer 0 als het basisscenario van deze functie:
Als x == 0:
... return 1
Recursie
Als de faculteitsfunctie nu een basisscenario heeft (x == 0), dan recursie op deze voorwaarde zal stoppen. Dus, zou het alleen een kwestie van het gebruik van recursie de faculteit bewerking uit te voeren:
anders:
... x*factor(x-1) retourneren
Als x niet gelijk is aan 0, vervolgens blijft de recursie beginnen /. De instructie return "factor" bellen u en wachten. Elke nieuwe functie-aanroep zal hetzelfde doen, bellen en wachten tot de laatste functie-aanroep (wanneer x == 0) geeft als resultaat 1. Vervolgens elk vorige gesprek zal eindigen de instructie return (vermenigvuldig de geretourneerde waarde van de "factor" door x) tot de faculteit wordt geretourneerd.
Python recursie
Recursie in elke taal kan eindigen in een oneindige lus: dat wil zeggen een recursieve structuur die nooit eindigt totdat het systeem het wegens stopt gebrek aan middelen. Python stopt deze "oneindige" recursie bij 1.000 oproepen (dus een functie zelf in een keten van 1.000 aanleg durende recursieve bellen kan voordat Python het proces stopt). De programmeur kunt het wijzigen van deze waarde door de systeembibliotheken, zoals in het volgende voorbeeld:
importeren van sys
sys.setrecursionlimit(2000)
Echter, op dat moment programmeurs kunnen vragen zelf als recursie de beste oplossing voor het probleem is.