Salut,
Les variables statiques (locales ou pas), c'est (souvent) mal : source de bug (comme tu en fais l'expérience
), ça fragilise la réentrance, ça cause des cheveux blancs en multithreading, la durée de vie de telles variables est moins évidente (on sait où ça commence, on sait moins bien quand ça fini), et ça rend les fonctions impures, c'est dire si c'est pas bien
techniquement, même sans les optimisations du compilateur, comment peux-tu savoir qu'une variable statique locale prend moins de temps que 3 paramètres ? Peut être qu'elle va être située en mémoire dans une zone couteuse d'accès (plus chère que le passage d'argument) ? Bref, l'idée est d'éviter d'utiliser des features du langage dans des objectifs d'optimisation. « L'optimisation prématurée est la source de tous les maux. », Donald Knuth (citant Dijkstra).
J'ai deux questions :
pourquoi ta fonction ne retourne pas la somme ?
pourquoi ta récursion va de 0 à n et non pas de n à 0 ?
ou dit autrement, si tu construit ta fonction récursive en allant de n à 0 et si la somme est retournée par la fonction, ben plus besoin de variables statiques et un seul paramètre suffit et tout le monde est content
P.S. : 2 remarques complémentaires :
1) si tu as peur de passer trop de paramètres dans ta fonction pour une raison X ou Y, plutôt que d'utiliser des fonctions statiques, utilises une structure de contexte :
1 2 3 4 5 6 7 8
| struct somme_contexte
{
int max;
int i_courant;
int somme_courante;
};
void somme_entiers(somme_contexte &contexte) |
2) alzheimer arrive plus tôt qu'on ne le pense, le temps d'écrire la première remarque, j'en ai oublié la seconde
Partager