Maison >développement back-end >Tutoriel Python >Python prend-il en charge l'optimisation des appels de queue, et pourquoi ou pourquoi pas ?
Python optimise-t-il la récursion de queue ?
En Python, l'optimisation des appels de queue (TCO) n'est pas prise en charge au sens traditionnel. Cela signifie que les fonctions récursives qui conservent le même cadre de pile tout au long des appels seront toujours soumises à la limite de profondeur de récursion maximale, ce qui entraînera l'erreur « RuntimeError : profondeur de récursion maximale dépassée. »
Exemple : Somme triangulaire Récursion
Considérons la fonction récursive suivante pour calculer la triangulaire sum :
def trisum(n, csum): if n == 0: return csum else: return trisum(n - 1, csum + n)
Cette fonction échoue avec « RuntimeError » lorsqu'elle est appliquée à de grandes valeurs de n.
Pourquoi Python n'optimise-t-il pas le TCO ?
Selon Guido van Rossum, le créateur de Python, il préfère la possibilité d'avoir des traçages appropriés à l'optimisation du TCO. Les traçages fournissent des informations de débogage précieuses, qui seraient perdues si le TCO était implémenté.
Élimination manuelle du TCO
Pour éviter l'erreur de profondeur de récursion, vous pouvez éliminer manuellement la récursion en utilisant une boucle while et des calculs itératifs :
def trisum(n, csum): while True: if n == 0: return csum n, csum = n - 1, csum + n
Ce code transforme la fonction récursive en une fonction itérative un, en s'assurant qu'il s'exécute sans dépasser la limite de profondeur de récursion.
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!