Est-il correct de dire que partout où la récursion est utilisée, une boucle for pourrait être utilisée ?
Oui, car la récursion dans la plupart des CPU est modélisée par des boucles et une structure de données de type pile.
Et si la récursion est généralement plus lente, quelle est la raison technique pour l'utiliser ?
Ce n'est pas "habituellement plus lent" : c'est la récursion appliquée de manière incorrecte qui est plus lente. De plus, les compilateurs modernes sont capables de convertir certaines récursions en boucles sans même le demander.
Et s'il est toujours possible de convertir une récursion en une boucle for, existe-t-il une méthode empirique pour le faire ?
Écrire des programmes itératifs pour les algorithmes qui sont mieux compris lorsqu'ils sont expliqués de manière itérative ; écrire des programmes récursifs pour les algorithmes qui sont mieux expliqués de manière récursive.
Par exemple, la recherche d'arbres binaires, l'exécution de quicksort et l'analyse d'expressions dans de nombreux langages de programmation sont souvent expliquées de manière récursive. Il est également préférable de les coder de manière récursive. En revanche, le calcul des factorielles et des nombres de Fibonacci est beaucoup plus facile à expliquer en termes d'itérations. Utiliser la récursivité pour ces calculs, c'est comme écraser des mouches avec un marteau de forgeron : ce n'est pas une bonne idée, même si le marteau de forgeron fait un très bon travail + .
+ J'ai emprunté l'analogie du marteau de forgeron à la "Discipline de la programmation" de Dijkstra.