récursion:
en termes de programmation, une fonction récursive peut être définie comme une routine qui s’appelle directement ou indirectement.
Utilisant l’algorithme récursif, certains problèmes peuvent être résolus assez facilement. Towers of Hanoi (TOH) est l’un de ces exercices de programmation. Essayez d’écrire un algorithme itératif pour TOH. De plus, chaque programme récursif peut être écrit en utilisant des méthodes itératives (voir Structures de données par Lipschutz).
mathématiquement récursivité aide à résoudre quelques énigmes facilement.,
par exemple, une question d’entrevue de routine,
Dans un groupe de N personnes, chaque personne ne se serrera la main qu’une seule fois. Au total, combien de secousses se produiraient?
Solution:
Il peut être résolu de différentes manières, graphiques, récursivité, etc. Voyons, comment récursivement il peut être résolu.
Il y a N personnes. Chaque personne se serrer la main une seule fois. Considérant n-person personne, (s)il doit serrer la main avec (N-1) personnes. Maintenant, le problème réduit à une petite instance de (N-1) personnes. En supposant TN comme total shake-hands, il peut être formulé récursivement.,
TN = (N-1) + TN-1
La résoudre récursivement donne une série arithmétique, qui peut être évaluée à N(N-1)/2.
exercice: dans un groupe de n couples, un seul sexe (Homme ou femme) peut serrer la main à chacun. Combien de poignées de main se produiraient?
Les programmes généralement récursifs entraînent de faibles complexités temporelles. Un exemple est la série de Fibonacci. La complexité temporelle du calcul du n-th nombre de Fibonacci en utilisant la récursivité est d’environ 1,6 N. cela signifie que le même ordinateur prend près de 60% de temps en plus pour le prochain nombre de Fibonacci. L’algorithme de Fibonacci récursif a des sous-problèmes superposés., Il existe d’autres techniques comme la programmation dynamique pour améliorer de tels algorithmes superposés.
cependant, peu d’algorithmes (par exemple, le tri par fusion, le tri rapide, etc.) entraînent une complexité temporelle optimale en utilisant la récursivité.
cas de base:
Une exigence critique des fonctions récursives est le point de terminaison ou le cas de base. Chaque programme récursif doit avoir un cas de base pour s’assurer que la fonction se terminera. Le cas de base manquant entraîne un comportement inattendu.,
différentes façons d’écrire des fonctions récursives
fonction se appelant: (voie directe)
la plupart d’entre nous au courant atleast deux façons différentes d’écrire des programmes récursifs. Étant donné ci-dessous est tours de Hanoï code. C’est un exemple de l’appel direct.
sortie:
Move the disk 1 from S to DMove the disk 2 from S to AMove the disk 1 from D to AMove the disk 3 from S to DMove the disk 1 from A to SMove the disk 2 from A to DMove the disk 1 from S to D
la complexité temporelle de TOH peut être calculée en formulant le nombre de mouvements.
Nous devons déplacer les premiers disques n-1 de la Source à L’auxiliaire et de L’auxiliaire à la Destination, c’est-à-dire que les premiers disques N-1 nécessitent deux mouvements. Encore un déplacement du dernier disque de la Source à la Destination., Mathématiquement, il peut être défini récursivement.
MN = 2mn – 1 + 1.
Nous pouvons facilement résoudre la relation récursive ci-dessus (2N-1), qui est exponentielle.
récursivité utilisant l’appel de fonction mutuelle: (manière indirecte)
appel Indirect. Bien que moins pratique, une fonction peut appeler une autre fonction qui appelle inturn ancienne fonction. Dans ce cas, les deux fonctions doivent avoir le cas de base.
programmation défensive:
Nous pouvons combiner des techniques de codage défensif avec récursivité pour la fonctionnalité gracieuse de l’application., Habituellement, la programmation récursive n’est pas autorisée dans les applications critiques pour la sécurité, telles que les commandes de vol, la surveillance de la santé, etc. Cependant, on peut utiliser une technique de comptage statique pour éviter les appels incontrôlés (pas dans les systèmes critiques de sécurité, peut être utilisé dans les systèmes en temps réel doux).
la profondeur de la profondeur d’appel dépend de la taille du cadre de la pile de fonction et de la taille maximale de la pile.
récursivité en utilisant des pointeurs de fonction: (manière indirecte)
la récursivité peut également être implémentée avec des pointeurs de fonction. Un exemple est le gestionnaire de signaux dans les systèmes de plainte POSIX., Si le gestionnaire provoque le déclenchement du même événement en raison duquel le gestionnaire est appelé,la fonction rentrera.