Maison > développement back-end > Tutoriel Python > Comment puis-je éviter RecursionError dans les fonctions récursives de Python ?

Comment puis-je éviter RecursionError dans les fonctions récursives de Python ?

Linda Hamilton
Libérer: 2024-12-28 05:42:13
original
715 Les gens l'ont consulté

How Can I Avoid RecursionError in Python's Recursive Functions?

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal