@23JFK … «Une fonction récursive c'est mal car ça fait exploser la pile»
Comment te dire … utiliser la récursivité quand on programme c'est une chose, l'utiliser quand on code c'est une autre chose, et, comme le rappelle L. Lamport, malheureusement vous êtes bien trop nombreux à ne pas faire la différence.
Là où éventuellement je pourrais peut-être te rejoindre est qu'il ne faut pas l'utiliser juste pour l'utiliser. Il faut simplement l'utiliser là où elle est utile voire nécessaire. Personne ne l'utiliserait, hors apprentissage et exemple, pour un calcul de factorielle. Tout le monde a intérêt à l'utiliser quand on manipule des sdd récursives et elles sont nombreuses et utilisées partout.
Elles sont utiles et utilisées car elles rendent le code plus lisible et plus maintenable, sans compter que le code est plus facilement débugable et ne t'en déplaise vérifiable. Si tu n'en veux pas tu vas de toute façon utiliser une version «dérécursivée» et tu feras sans doute un moins bon job avec.
Maintenant si j'extrapole ce Lamport raconte, c'est que pour ce cas, le grand avantages est de penser bien avant le code comment on doit ou peut faire. Si tu n'as jamais fait ça tu n'y arriveras pas et tu resteras enfermé dans un mode de pensée qui ne te permettra pas d'avancer. Tu ne découvriras jamais l'approche de la programmation dynamique par exemple.
Il faut arrêter de penser immédiatement que le code qui implémente un programme sera traduit mot à mot par le compilo … une récursivité terminale est éliminable facilement et le sera par tout compilo moderne … y compris pour la factorielle si elle est bien codée.
Quant aux «algorithmes mathématiques inutilisables», pense simplement à un quicksort, un A*, un LCS … parce que oui, l'algo c'est des math et les algos servent aussi à produire du code efficace.
T'es pas obligé d'être bon en math pour savoir coder, mais pour coder efficacement c'est un avantage indéniable, tout comme comprendre la récursivité est un atout.
Partager