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. 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).
  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. 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