L'utilisation de la récursion présente de nombreux avantages et inconvénients. La simplicité du code est sans aucun doute le plus grand avantage, qui se traduit également par une meilleure maintenabilité du code et une réduction des bogues.
Le plus grand danger de la récursion réside dans les cas limites où l'algorithme devient incontrôlable et dépasse la limite de la pile de fonctions. Certains langages, dont le langage ABL de Progress, ont un paramètre pour le niveau le plus élevé d'appels imbriqués autorisés. Il s'agit généralement d'un niveau bas et l'ajout de la récursion au mélange peut amener une application à dépasser cette limite.
En bref, la récursion doit toujours être implémentée avec des cas de terminaison serrés, sinon elle peut être très difficile à déboguer (à cause de l'imprévisibilité) et peut causer de sérieux problèmes dans le code de production.
En ce qui concerne les problèmes de mémoire et de vitesse, à moins qu'il ne s'agisse d'une méthode courte (en termes de temps) appelée de nombreuses fois, les performances n'ont pas vraiment d'importance.
Exemple : Si vous utilisez la récursion pour analyser tous les fichiers et dossiers d'un disque dur, l'impact de la récursion sur les performances est minuscule par rapport au temps nécessaire pour atteindre le disque dur et saisir les informations du système de fichiers. Dans ce cas, la récursion est probablement préférable au traitement itératif.
Un autre exemple : Si vous parcourez les nœuds d'une structure arborescente, un processus itératif peut être plus bénéfique car nous n'impliquons pas autant la pile de fonctions, ce qui signifie que nous sollicitons moins de mémoire et que nous laissons probablement le matériel utiliser davantage de cache. Voir la réponse de Robert Gould pour plus de détails.