Pourquoi la fonction récursive Python ne renvoie parfois aucun
Contrairement aux fonctions itératives, les fonctions récursives s'appuient sur leurs appels récursifs pour renvoyer des valeurs. Lorsque la fonction est appelée plusieurs fois, les valeurs de retour doivent être gérées de manière appropriée pour obtenir le résultat souhaité.
Considérez le code Python suivant :
<code class="python">def gcdIter(a, b): a, b = min(a, b), max(a, b) if b % a == 0: print(a) return a gcdIter(a, b % a)</code>
Cette fonction vise à trouver le plus grand diviseur commun de deux nombres utilisant la récursion. Cependant, il peut renvoyer None pour certaines entrées car la valeur de retour de l'appel récursif n'est pas gérée correctement.
<code class="python">print(gcdIter(306, 136)) # Returns None print(gcdIter(42, 84)) # Returns 42</code>
Pour résoudre ce problème, le code doit renvoyer la valeur de retour de l'appel récursif à la fonction principale. En modifiant la ligne gcdIter(a, b % a) pour renvoyer gcdIter(a, b % a), la fonction renverra correctement le plus grand diviseur commun.
<code class="python">def gcdIter(a, b): a, b = min(a, b), max(a, b) if b % a == 0: print(a) return a return gcdIter(a, b % a)</code>
Alternativement, la fonction peut être réécrite plus de manière compacte comme :
<code class="python">def gcd_iter(a, b): return gcd_iter(b, a % b) if b else abs(a)</code>
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!