Python-recursie (recursieve functie)

In deze tutorial leer je een recursieve functie te maken (een functie die zichzelf aanroept).

Wat is recursie?

Recursie is het proces waarbij iets op zichzelf wordt gedefinieerd.

Een voorbeeld in de fysieke wereld zou zijn om twee parallelle spiegels tegenover elkaar te plaatsen. Elk object ertussenin zou recursief worden weergegeven.

Python recursieve functie

In Python weten we dat een functie andere functies kan aanroepen. Het is zelfs mogelijk dat de functie zichzelf aanroept. Deze typen construct worden recursieve functies genoemd.

De volgende afbeelding toont de werking van een recursieve functie genaamd recurse.

Recursieve functie in Python

Hieronder volgt een voorbeeld van een recursieve functie om de faculteit van een geheel getal te vinden.

Factorieel van een getal is het product van alle gehele getallen van 1 tot dat getal. De faculteit van 6 (aangeduid als 6!) Is bijvoorbeeld 1 * 2 * 3 * 4 * 5 * 6 = 720.

Voorbeeld van een recursieve functie

 def factorial(x): """This is a recursive function to find the factorial of an integer""" if x == 1: return 1 else: return (x * factorial(x-1)) num = 3 print("The factorial of", num, "is", factorial(num))

Uitvoer

 De faculteit van 3 is 6

In het bovenstaande voorbeeld factorial()is dit een recursieve functie zoals deze zichzelf noemt.

Wanneer we deze functie aanroepen met een positief geheel getal, zal het zichzelf recursief aanroepen door het getal te verlagen.

Elke functie vermenigvuldigt het getal met de faculteit van het getal eronder totdat het gelijk is aan één. Deze recursieve oproep kan in de volgende stappen worden uitgelegd.

 faculteit (3) # 1e oproep met 3 3 * faculteit (2) # 2e oproep met 2 3 * 2 * faculteit (1) # 3e oproep met 1 3 * 2 * 1 # terugkeer van 3e oproep als nummer = 1 3 * 2 # terugkeer van 2e oproep 6 # terugkeer van 1e oproep

Laten we eens kijken naar een afbeelding die een stapsgewijs proces laat zien van wat er gaande is:

Werken met een recursieve factoriële functie

Onze recursie eindigt wanneer het aantal afneemt tot 1. Dit wordt de basisvoorwaarde genoemd.

Elke recursieve functie moet een basisvoorwaarde hebben die de recursie stopt, anders roept de functie zichzelf oneindig aan.

De Python-interpreter beperkt de diepten van recursie om oneindige recursies te helpen voorkomen, wat resulteert in stack-overflows.

Standaard is de maximale diepte van recursie 1000. Als de limiet wordt overschreden, resulteert dit in RecursionError. Laten we eens kijken naar zo'n toestand.

 def recursor(): recursor() recursor()

Uitvoer

 Traceback (meest recente oproep laatste): bestand "", regel 3, in bestand "", regel 2, in een bestand "", regel 2, in een bestand "", regel 2, in een (vorige regel 996 keer herhaald ) RecursionError: maximale recursiediepte overschreden

Voordelen van recursie

  1. Recursieve functies zorgen ervoor dat de code er schoon en elegant uitziet.
  2. Een complexe taak kan door middel van recursie worden opgesplitst in eenvoudiger deelproblemen.
  3. Het genereren van sequenties is gemakkelijker met recursie dan met een geneste iteratie.

Nadelen van recursie

  1. Soms is de logica achter recursie moeilijk te volgen.
  2. Recursieve oproepen zijn duur (inefficiënt) omdat ze veel geheugen en tijd in beslag nemen.
  3. Recursieve functies zijn moeilijk te debuggen.

Interessante artikelen...