Comprendre le comportement déroutant des fonctions récursives Python : pourquoi gcdIter ne renvoie-t-il aucun ?
Lorsqu'il s'agit de fonctions récursives, il est crucial de comprendre leur mécanisme de retour. Considérons la fonction gcdIter suivante, destinée à calculer le plus grand diviseur commun (PGCD) de deux nombres. Cependant, pour certaines valeurs d'entrée (par exemple, 306 et 136), elle renvoie de manière inattendue Aucun.
Le problème réside dans la partie récursive du code :
gcdIter (a,b%a)
Alors que la fonction crée un appel récursif à lui-même avec les paramètres pertinents, il ne parvient pas à gérer la valeur de retour de cet appel. Pour conserver le résultat GCD, la valeur de retour doit être transmise en remontant la chaîne :
return gcdIter (a,b%a)
De plus, il est prudent d'utiliser des affectations de variables multi-cibles pour rationaliser le code :
def gcdIter(a, b): a, b = min(a, b), max(a, b) if b % a == 0: return a return gcdIter(a, b % a)
En résolvant ces problèmes, gcdIter renverra systématiquement le GCD pour toutes les valeurs d'entrée données, comme prévu.
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!