Pourquoi ma fonction Python récursive ne renvoie-t-elle aucun résultat au lieu du chemin attendu ?

Susan Sarandon
Libérer: 2024-11-14 21:22:02
original
708 Les gens l'ont consulté

Why Does My Recursive Python Function Return None Instead of the Expected Path?

Fonctions récursives et renvoi d'aucun en Python [Dupliquer]

En Python, les fonctions récursives peuvent être un outil efficace pour résoudre des problèmes complexes. Cependant, il est important de comprendre les mécanismes de récursivité pour éviter des résultats inattendus.

Considérez l'extrait de code suivant :

def get_path(dictionary, rqfile, prefix=[]):
    for filename in dictionary.keys():
        path = prefix + [filename]
        if not isinstance(dictionary[filename], dict):
            if rqfile in str(os.path.join(*path)):
                return str(os.path.join(*path))
        else:
            get_path(directory[filename], rqfile, path)
Copier après la connexion

Cette fonction vise à renvoyer le chemin d'accès à un fichier spécifique dans un fichier imbriqué. dictionnaire. Cependant, une fois exécuté, le problème se pose qu'il renvoie None au lieu du chemin attendu.

Le problème réside dans la gestion de l'appel récursif. Pour implémenter correctement la récursion, le résultat de l'appel récursif doit être renvoyé à la fonction appelante. Dans ce cas, cela doit être fait dans le bloc else :

else:
    return get_path(directory[filename], rqfile, path)
Copier après la connexion

Cela garantit que la fonction propage le résultat dans la chaîne récursive, renvoyant finalement le chemin à l'appelant.

Alternativement, supprimer le bloc else et toujours revenir à la fin de la boucle for peut également résoudre le problème :

for filename in dictionary.keys():
    path = prefix + [filename]
    if not isinstance(dictionary[filename], dict):
        if rqfile in str(os.path.join(*path)):
            return str(os.path.join(*path))
    return get_path(directory[filename], rqfile, path)
Copier après la connexion

En renvoyant systématiquement le résultat récursif, la fonction peut désormais récupérer correctement et renvoyer le chemin d'accès au fichier souhaité.

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