Maison > développement back-end > Tutoriel Python > Python prend-il en charge l'optimisation des appels de queue, et pourquoi ou pourquoi pas ?

Python prend-il en charge l'optimisation des appels de queue, et pourquoi ou pourquoi pas ?

Mary-Kate Olsen
Libérer: 2024-12-05 03:08:13
original
377 Les gens l'ont consulté

Does Python Support Tail Call Optimization, and Why or Why Not?

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

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

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!

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