Python recursieve functie

  1. Wat is Python recursieve functie
  2. Beperking van recursie
  3. Voordeel van recursie
  4. Nadeel van recursie

In deze sectie leert u de recursieve functie van Python.

Wat is Python recursieve functie

Een recursieve functie is een functie die zichzelf aanroept en dit proces wordt functie-recursie genoemd.

Laten we bijvoorbeeld de faculteit van een getal berekenen, bijvoorbeeld 6.

6 * 5 * 4 * 3 * 2 * 1

In de volgende code wordt een recursieve functie gemaakt die de faculteit van een getal vindt:

def fact(n):
    """Recursive function to find factorial"""
    if n == 1:
        return 1
    else:
        return (n * fact(n - 1))
a = 6
print("Factorial of", a, "=", fact(a))
Factorial of 6 = 720

De functie fact(n) is een recursieve functie. De fact functie noemt zichzelf met argument n-1 totdat het getal 1 wordt en zo wordt de faculteit berekend, dat wil zeggen het getal vermenigvuldigen met de faculteit van één kleiner dan het getal.

In deze recursieve functie is een basis voorwaarde dat wanneer het aantal wordt 1 , 1 wordt teruggevoerd en zo recursieve aanroep wordt eindig.

Bij het maken van een recursieve functie moet er een basisvoorwaarde zijn om die recursieve oproep te beëindigen.

Beperking van recursie

Zoals jij hebt opgemerkt, heeft de functie elke keer dat de functie zichzelf aanroept, wat geheugen nodig om enkele tussenliggende waarden op te slaan. Daarom verbruikt recursieve functie veel meer geheugen dan een normale niet-recursieve functie. Python stelt de recursie-aanroepbeperking in op 3000.

>>> import sys
>>> sys.getrecursionlimit()
3000

Het verhoogt een RecursionError als recursie overschrijdt 3000.

def fact(n):
    """Recursive function to find factorial"""
    if n == 1:
        return 1
    else:
        return (n * fact(n - 1))
    
print(fact(4000))
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    print(factorial(4000))
  File "<pyshell#1>", line 5, in factorial
    return n * factorial(n-1)
  File "<pyshell#1>", line 5, in factorial
    return n * factorial(n-1)
  File "<pyshell#1>", line 5, in factorial
    return n * factorial(n-1)
  [Previous line repeated 989 more times]
  File "<pyshell#1>", line 2, in factorial
    if n == 1:
RecursionError: maximum recursion depth exceeded in comparison

Oplossing om recursiebeperking te verwijderen

Je kan de recursiebeperking oplossen door de recursiebeperking in te stellen op een groter aantal dan de vereiste recursie.

import sys
sys.setrecursionlimit(5000)
def fact(n):
    """Recursive function to find factorial"""
    if n == 1:
        return 1
    else:
        return (n * fact(n - 1))
    
print(fact(4000))

Voordeel van recursie

  • Met behulp van recursieve functies kan het probleem worden onderverdeeld in subproblemen die eenvoudig kunnen worden opgelost.
  • De code wordt netjes en schoon.

Nadeel van recursie

  • Het is soms moeilijk om de logica van recursieve functie te volgen.
  • Het oplossen van elk subprobleem kost veel tijd, dus recursieve functies zijn niet efficiënt.