web-dev-qa-db-fra.com

Toutes les fonctions récursives peuvent-elles être codées avec des itérations?

Quels sont les avantages de la récursion?

Certaines langues de programmation peuvent optimiser la récursion de la queue, mais, toujours en termes généraux, la récursivité consomme plus de ressources que les boucles régulières.

Est-il possible d'avoir une version itérative de certaines fonctions récursives?

10
OscarRyz

Oui, vous pouvez coder les fonctions récursives comme itérations. Il vous oblige essentiellement à conserver les informations manuellement qu'autrement aurait été prise en charge par la méthode appelant le code généré par le compilateur.

En d'autres termes, vous avez besoin d'une pile où chaque entrée est une structure contenant les paramètres transcédés et toutes les variables locales. Vous travaillez toujours sur la plus grande entrée sur la pile. Si vous avez besoin de vous appeler vous-même, créez une nouvelle entrée et mettez en haut de la pile. Une fois terminé, prenez la plus haute entrée de la pile exposant celle ci-dessous et utilisez l'entrée précédemment la plus haute pour extraire les valeurs de retour et mettre à jour la nouvelle entrée la plus haute en conséquence.

Je vous suggère d'étudier un livre de compilateur pour voir comment cela est habituellement implémenté dans le code de la machine.

10
user1249

Je crois que la récursivité est l'un de ces outils qu'un programmeur DOI doit vivre. Avec la récursion, vous pouvez "penser" vos algorithmes et les résoudre comme vous y pensez. Mais, je dois vous avertir, tout le monde parle de la jolie récursive et de la quantité de simplicité apporte au code, à ce que j'ai quelques choses à dire:

  1. Tout d'abord, pensant que la "voie récursive" d'un algorithme n'est pas facile. Construire une fonction comme une factorielle (n!) Ou quelque chose comme des tours de Hanoi n'est que la pointe de l'iceberg et atteignant le fond nécessite un temps looong.
  2. Ne pensez pas que la récursivité n'apporte que la simplicité dans votre code, parfois, la manière itérative est laide et en désordre, mais est rentable (examinez la solution récursive du problème de Fibonacci)

Avoir ces choses à l'esprit, apprendre la récursion! C'est drôle, complexe et cela écrasera votre cerveau!, mais vous vous retrouverez à aimer cela.

Bonne chance!

0
David Conde