Dépassement de la profondeur de récursion et stratégies d'atténuation
Les programmeurs Python rencontrent généralement des débordements de pile en raison d'une récursion profonde. Lorsque la profondeur de récursion maximale est dépassée, une RecursionError est levée. Cela se produit parce que l'implémentation CPython de Python manque d'optimisation de la récursion de queue.
Exemple de fonction récursive de queue
Considérez la fonction récursive de queue suivante :
def recursive_function(n, sum): if n < 1: return sum else: return recursive_function(n-1, sum+n)
Quand appelée avec n=998, la fonction échoue avec un RecursionError.
Augmentation de la limite de récursion
Python fournit la fonction sys.getrecursionlimit() pour récupérer la limite de récursion actuelle. Par défaut, cette limite est relativement basse pour éviter une consommation excessive de pile. Pour augmenter la limite, utilisez sys.setrecursionlimit(new_limit).
Attention
Augmenter la limite de récursion est potentiellement dangereux. Les stackframes Python, qui contiennent des informations sur les appels de fonction, peuvent être volumineux. Une augmentation excessive de la limite peut épuiser la mémoire disponible.
Alternative itérative
Comme approche privilégiée, essayez de réécrire l'algorithme de manière itérative. Python n'est pas intrinsèquement un langage fonctionnel et la récursion de queue n'est peut-être pas une technique efficace. Les solutions itératives fonctionnent souvent mieux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!