Fonctions récursives en Python

Dans ce tutoriel, nous allons voir le Récursivité avec des exemples en Python. La récursivité en programmation est une technique très puissante, elle se fait avec des fonctions qui s'appellent elles-mêmes, la voient comme une sorte de boucle, puisque le même code sera répété plusieurs fois, jusqu'à ce que la solution soit atteinte.

Caractéristiques que doit avoir une fonction récursiveCas de baseCela nous permettra de terminer la fonction à un moment donné et que les appels infinis ne se produisent pas.
Cas récursifDans ce cas, nous appelons à nouveau la fonction, mais nous nous rapprocherons de la solution. Cela sera mieux dans les exemples.

NoterIl est important d'être clair sur le cas de base et de savoir que le cas récursif s'en rapproche et n'entre pas dans un état d'appels infinis, c'est une erreur courante lors du démarrage par récursivité.

Venons-en aux exemples, qui seront simples et courts pour qu'ils soient bien assimilés.

Exemple 1 - Factorielle


Dans cet exemple, nous allons résoudre la factorielle d'un nombreSi vous voulez savoir de quoi parle la factorielle, visitez ce lien. Voici le code, et ci-dessous j'explique la fonction récursive.
 def factoriel (nombre): if (nombre == 0 ou nombre == 1): return 1 else: return number * factoriel (nombre-1) if __name__ == "__main__": try: num = int (input ("From De quel nombre voulez-vous connaître la factorielle ? ")) if (num <0) : print (" Le nombre doit être supérieur ou égal à 0 ") else : print (" La factorielle de ", num," est ", factoriel (num )) sauf : print ("Un nombre est attendu") 
Notre fonction récursive a le cas de base dans le if et le cas récursif dans le else. Vous pouvez voir que le cas de base renvoie un 1 et que celui-ci est atteint lorsque le paramètre passé à la fonction est 0 ou 1, lorsque ce cas est atteint la fonction n'appelle plus. Dans le cas récursif nous avons un appel de la fonction à elle-même, mais comment voyez-vous réduire le paramètre de 1 (on se rapproche du cas de base). La dernière partie du code en dehors de la fonction est uniquement chargée de demander un nombre à l'utilisateur et de vérifier qu'il est supérieur ou égal à 0 pour appeler la fonction, puisque la factorielle avec des nombres négatifs ne fonctionne pas.

Si on appelle la fonction avec le nombre 4, c'est-à-dire factorielle (4), on a les appels suivants :

 Appel 1 : factoriel (4) Appel 2 : 4 * factoriel (3) Appel 3 : 3 * factoriel (2) Appel 4 : 2 * factoriel (1)
Lors de l'appel factoriel avec 1, il n'y a plus d'appels et il renverra 1, puis cette fonction renvoie les résultats à la fonction que je l'appelle, le retour serait comme ceci :
 factoriel (1) = 1 factoriel (2) = 2 * 1 factoriel (3) = 3 * 2 factoriel (4) = 4 * 6
Et nous avons déjà notre résultat, qui est 24, en multipliant les nombres : 1 * 2 * 3 * 4. Ensuite, je laisse une capture d'écran lorsque je demande la factorielle de 5, qui n'est rien de plus que de multiplier 5 par la factorielle de 4 (que nous savons déjà est 24) donnant comme résultat 120. Vous pouvez également voir que si l'utilisateur insère le nombre faux, c'est :

Exemple 2 - Addition soustraction


Dans cet exemple, j'ai mis une fonction récursive pour faire une addition ou une soustraction, bien sûr cet exemple ne se produit généralement pas dans la vie réelle, mais à titre d'exemple, cela fonctionne :
 def opérer (nombre1, nombre2) : if (nombre2 == 0) : retourner nombre1 elif (nombre2 <0) : retourner opérer (nombre1-1, nombre2 + 1) else : retourner opérer (nombre1 + 1, nombre2-1) si __name__ == "__main__": print ("Ajout de 10 et 3 : ", exploite (10, 3)) print ("Ajout de 5 et -2 :", exploite (5, -2)) 
Ici nous avons un cas de base et 2 cas récursifs, il s'agit de savoir dans quel sens toucher, car selon que le nombre est positif ou négatif nous devrons agir différemment. La fonction d'exploitation reçoit 2 nombres, et l'algorithme se chargera de soustraire ou d'ajouter un à nombre2 et de le passer à nombre1 (Si nombre2 est positif, je soustrairai 1 à nombre2 et l'ajouterai à nombre1), donc jusqu'à ce que la variable nombre2 soit égale à 0.

Par exemple, nous allons ajouter 3 + 2 en voyant les appels.

 Appel 1 : actionner (3,2) Appel 2 : actionner (4,1) Appel 3 : actionner (5,0)
Dans ce cas, quand on arrive à opérer (5,0) il n'y a rien d'autre à faire, on a le résultat directement (contrairement au cas de la factorielle qui devait faire la multiplication). Voici le résultat de l'exécution du code :

NoterBien qu'avec la récursivité nous ayons une solution élégante et normalement plus courte, elle devrait être utilisée lorsque nous n'avons pas d'autre option, si nous pouvons tirer par sa variante itérative, ce sera un meilleur choix, car elle consomme moins de mémoire et est généralement plus rapide.

Avez-vous aimé et aidé ce tutoriel ?Vous pouvez récompenser l'auteur en appuyant sur ce bouton pour lui donner un point positif
wave wave wave wave wave