Exercice langage C: Suite de Fibonacci

Enoncé: 

La suite de Fibonnacci est la solution au problème suivant: supposons qu'un couple (un mâle, une femelle) de lapins immatures soit mis dans un champ, que la maturité sexuelle du lapin soit atteinte après un mois qui est aussi la durée de gestation, que chaque portée comporte toujours un mâle et une femelle et que les lapins ne meurent pas. Combien y aura-t-il de lapins dans le champ après un an?

Écrivez un programme qui affiche les premiers termes de la suite de Fibonacci. Cette suite qu'on notera F peut se calculer ainsi: F(0) = 1, F(1) = 1, F(i) = 1 et F(i-1) + F ( i – 2 ) .

Essayez les deux possiblités: avec et sans récursivité. Quelle version est la plus rapide ?

Vérifiez que le quotient de 2 nombres consécutifs de la suite de Fibonacci converge vers le nombre d'or (1+?5)/2 , qui vaut environ 1.61803...


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include 
#include 

using namespace std;

int fibonacci(int n) {
  if (n == 0 || n == 1)
    return 1;
  else
    return fibonacci(n-1) + fibonacci(n-2);
}

int main(int argc, char **argv) {
  int n;
 cout << "Suite de Fibonacci" << endl << "Nombre de termes: ";
  cin >> n;

  if (n > 0)
   cout << "F(0) = 1" << endl;
  if (n > 1)
   cout << "F(1) = 1" << endl;

  int f_2 = 1;
  int f_1 = 1;
  int f;

  for (int i=2; i<n; i++) {
    f = f_1 + f_2;
   cout << "F(" << i << ") = " << f << ", q = " << float(f) / f_1 << endl;
    f_2 = f_1;
    f_1 = f;
  }

 cout << "Nombre d'or: " << (1 + sqrt(5)) / 2 << endl;

 cout << "Suite recursive:" << endl;

  for (int i=0; i<n; i++)
   cout << "F(" << i << ") = " << fibonacci(i) << endl;

  return 0;
}