Spécificités du C++
Suite de Fibonacci : le calcul numérique appliqué à la procréation des lapins
La suite de Fibonacci est une suite d’entiers devant son nom au mathématicien italien du XIIIème siècle Leonardo Fibonacci qui, dans un problème récréatif posé dans un de ses ouvrages, le Liber Abaci, décrit la croissance d’une population de lapins en ces termes
Un homme met un couple de lapins dans un lieu isolé de tous les côtés par un mur. Combien de couples obtient-on en un an si chaque couple engendre tous les mois un nouveau couple à compter du troisième mois de son existence ?
Ce problème est à l’origine de la suite dont le \(n\)ième terme correspond au nombre de paires de lapins au \(n\)ième mois. En notant \(\mathcal{F}_n\) le nombre de couples de lapin au début du mois \(n\) et en posant \(\mathcal{F}_1=\mathcal{F}_2=1\), Fibonacci déduit ainsi la relation de récurrence suivante :
à savoir que le nombre de couples de lapin au mois \(n\) est égal à la somme des couples de lapins lors des deux moins précédents.
- Écrire une fonction calculant le nombre de Fibonacci au \(n\)ième terme. Par
défaut, cette fonction fournira le nombre de Fibonacci pour \(n=10\). En outre,
vous déclarerez deux fonctions
fibonacci
prenant comme argument respectivement un entier court non signéunsigned short
et un entier non signéunsigned int
. Tester l’appel de chacune des fonctions suivant le type d’argument fourni. - Au sein du programme principal, réaliser \(N\gg1\) fois le calcul de la fonction
de Fibonacci et estimer le temps d’exécution nécessaire au programme via la
commande unix
time ./nom_executable
. - Modifier les précédentes fonctions afin de les rendre “en ligne”. Comparer et commenter le temps d’exécution dans ce mode par rapport aux précédentes déclarations.
- Concevoir et implémenter une fonction
rfibonacci
proposant une solution récursive au calcul de la suite de Fibonacci. À partir de cette fonction, déduire une macro équivalente, l’implémenter et expliquer le résultat de la compilation. Rendre la fonctionrfibonacci
“en ligne”, compiler et, sachant que la notion de fonction en ligne est équivalente à la définition de macro du point de vue du remplacement littéral des expressions, interpréter le fait que le compilateur permette l’exécution du programme. - Insérer la fonction récursive
rfibonacci
, renommée enfibonacci
, dans deux fichiers distincts : un premier fichier d’en-tête nomméfibonacci.h
comprenant la déclaration (prototype) de la fonction et un second,fibonacci.cc
, définissant cette fonction. Modifier le programme principal afin d’utiliser cette fonction (on commentera provisoirement la précédente fonctionfibonacci
), compiler et tester l’exécution. - Finalement, décommenter la version “locale” de
fibonacci
i.e. celle contenue dans le programme principal et définie au début de cette exercice. Chercher à résoudre l’erreur de compilation en utilisant un espace de nomlocal
et tester le programme en forçant le choix de fonction à utiliser via l’opérateur de portéelocal::
.