Algorithme

salut! Est_ce que on peut realiser un algorithme de suite de fibonnaci ;; en utilisant juste 3 variables dans la déclaration ??

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    'lut, aux premiers abords c'est possible:
    • i
      , l'itération à laquelle on se trouve
    • f1
      , qui vaut
      fib(i-1)
      , c'est à dire la valeur précédente
    • f2
      , qui vaut
      fib(i-2)
      , la valeur précédente de f1

    Mais en pratique il nous faut une variable supplémentaire pour stocker la valeur future de
    f1
    avant qu'on ne fasse tourner les valeurs précédentes avec
    f2 = f1
    .
    Donc en fait, non.
    1. Damned!
    2. !! mais soit disons ça ,, comment on stocke la somme des termes f1 et f2 ,, f1+f2?
    3. et si voulez écrivez moi un petit algorithme pour mieux comprendre votre principe !!! et mercii beaucoup
  2. Bonsoir, on n'est pas là non plus pour faire le travail à ta place.
    Tu peux tenter d'écrire quelque chose et on te diras si ça marche ou pas.
    1. Modérateur
      Bonjour,

      "3 variables dans la déclaration"
      Est-ce que l'on compte le paramètre de la fonction ?
      Genre, si je fais
      fibo(n)
      avec juste
      n
      , ça fait 0 ou 1 ?

      int fibo(int n) {
          return n < 2 ? 1 : fibo(n - 1) + fibo(n - 2);
      }

      PS. Est-ce que l'on demande aussi à ce que l'algorithme soit efficace ?
      Parce que celui-ci ne l'est pas vraiment... mais il a moins de 3 variables !
      1. Modérateur
        Sinon de manière optimisée on peut faire ça avec 2 variables (3 si on compte n).

        int fibo(int n) {
            int f = 1;
            for (int f2 = 0; n > 0; n--, f = f2 + (f2 = f));
            return f;
        }

        Remarque :
        Je code en Java, d'autres langages pourraient ne pas accepter cette écriture.
      2. @KXmerci bcp ,, on a pas encore étudier le java ,, on est en pascal c tt c prk j'ai pas bien compris cette solution!
      3. Modérateur
        Perso, je ne suis pas convaincu que ce soit que la faute du langage...

        On peut faire exactement pareil avec Pascal pour la première fonction.

        function fibo(n:integer):integer;
        begin
             if (n < 2)
             then result := 1
             else result := fibo(n-1) + fibo(n-2)
        end;

        Remarque : même question que tout à l'heure, est-ce que ce code déclare 0 variable, 1 variable (en comptant n), ou 2 (avec en plus la valeur result en Pascal) ?

        Pour ma deuxième proposition, ce n'est pas adaptable mais il est tout à fait possible de descendre à 2 variables aussi (3 ou 4 selon comment on compte).