Commençont par un exemple simple.
La suite de fibonacci est assez simple est connue pour faire l'objet d'un exemple. La fonction suivante renvoie le n-ième terme de cette suite. chacun étant la somme des deux précédents.
int fib(int n){
if(n <= 2){ /* permet la terminaison de la fonction*/
return 1;
}
else {
return fib(n - 1) + fib(n - 2);
}
}
Cependant, cette fonction présente de gros problèmes. De lisibilitée en particulier. Premièrement les accolades sont génantes.
int fib(int n){
if(n <= 2) /* permet la terminaison de la fonction*/
return 1;
else
return fib(n - 1) + fib(n - 2);
}
Secondement, la clause 'else' ne sert à rien, on peut donc la retirer.
int fib(int n){
if(n <= 2) /* permet la terminaison de la fonction*/
return 1;
return fib(n - 1) + fib(n - 2);
}
Ensuite les commentaire obfusquent le code, lui retirant de sa puretée. Pour des commentaire qui, qui plus est, sont triviaux.
int fib(int n){
if(n <= 2) return 1;
return fib(n - 1) + fib(n - 2);
}
De plus le C étant un vieux language, l'inférence de type existe dans sa vraie forme. Par défault, tout est un 'int'. Cette option rajoutera à la compilation le besoin du drapeau '-std=c89' pour dire qu'on sait coder en C.
fib(n){
if(n <= 2) return 1;
return fib(n - 1) + fib(n - 2);
}
En réfléchissant un peu à la logique du code, on peut utiliser l'opérateur ternaire en place du 'if'. Ce qui permet d'atteindre ce code:
fib(n){
return (n <= 2)? 1 : fib(n - 1) + fib(n - 2);
}
Ce code illustre plusieurs fonctionnalitée du C:
- une définition de fonction.
- l'inférence de type du C.
- en C tout est entier (ou pointeur).