Tutoriel Python - Fonction récursive
- Qu’est-ce que la fonction récursive Python
- Limitation de la récursivité
- Avantage de la récursion
- Inconvénient de la récursivité
Dans cette section, vous apprendrez les fonctions récursives de Python.
Qu’est-ce que la fonction récursive Python
Une fonction récursive est une fonction qui s’appelle elle-même et ce processus est appelé récursion de fonction.
Par exemple, calculons la factorielle d’un nombre, par exemple, 6
.
6 * 5 * 4 * 3 * 2 * 1
Dans le code suivant, une fonction récursive est créée qui trouve la factorielle d’un nombre:
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
La fonction fact(n)
est une fonction récursive. La fonction fact
se nomme elle-même avec l’argument n-1
jusqu’à ce que le nombre devienne 1 et c’est ainsi que la factorielle est calculée, c’est-à-dire en multipliant le nombre par la factorielle de un de moins que le nombre.
Dans cette fonction récursive, il y a une condition de base qui est que lorsque le nombre devient 1
, 1
est retourné et de cette façon l’appel récursif devient fini.
Lors de la création d’une fonction récursive, il doit y avoir une condition de base pour terminer cet appel récursif.
Limitation de la récursivité
Comme vous l’avez remarqué, à chaque fois que la fonction s’appelle, elle a besoin de mémoire pour stocker quelques valeurs intermédiaires. Par conséquent, une fonction récursive consomme beaucoup plus de mémoire qu’une fonction non récursive normale. Python fixe la limitation des appels récursifs à 3000
.
>>> import sys
>>> sys.getrecursionlimit()
3000
Il lève une ErreurRécursive
si la récursion dépasse 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
Solution pour supprimer la limitation de récursion
Vous pouvez résoudre la limitation de la récursion en la fixant à un nombre supérieur à la récursion requise.
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))
Avantage de la récursion
- En utilisant des fonctions récursives, le problème peut être divisé en sous-problèmes qui peuvent être résolus facilement.
- Le code devient propre et net.
Inconvénient de la récursivité
- Il est parfois difficile de suivre la logique de la fonction récursive.
- La résolution de chaque sous-problème prendra beaucoup de temps et les fonctions récursives sont donc inefficaces.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook