Aller au contenu

Aide creer une fonction de Fibonnaci


risbo

Messages recommandés

Voila je dois creer une fonction qui donne les nombres de Fibonnaci pairs mais celle que j ai fais ne fonctionne pas ;-(

Suite de Fibonnaci

main (){

int a;

int b;

int c;

a=1;

b=2;

print 1;

print 1;

encore:

a=a-1;

b=b-2;

c=a+b;

if (n&1==1)

go to encore;

printf ("%d ",c);

go to encore;

}

l erreur est

erreur: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘de’

ili375@ultra5$

Merci de votre aide :(

Lien vers le commentaire
Partager sur d’autres sites

Une version simple faite en deux minutes au boulot

version naïve, on calcul fibonnaci(x), s'il est pair on l'affiche, puis on calcul fibonnaci(x+1)...

#include <stdio.h>

int fibo (int n) {
 if (n==1) return 1;
 if (n==0) return 0;
 return (fibo(n-1) + fibo(n-2));
}

int main () {

 int r;
 int step;

 step = 2;

 while (step < 20) {   
  r=fibo(step);
  if (r%2==0) printf("%d\n", r);
  step++;
 }

return 0;
}

Charge a toi d'optimiser ca, histoire d'éviter de recalculer plein de fois les mêmes nombres.

Lien vers le commentaire
Partager sur d’autres sites

Quel est le langage utilisé ?

Du C, mais je crois que le probleme est resolu il semble que ce soit betement um probleme de librairies qui netaient pas indiques

évite les boucles inconditionnelles.

pour 3 raisons :

0 - premièrement, tout ce qui est fait par goto pourrait être fait autrement . ( ici, au dessus, t'as une solution simple avec une fonction récursive )

1 - deuxièmement : L'utilisation de Goto peut entraîner des erreurs dans la gestion de la mémoire. ( surtout en Java ou dans n'importe quel langage qui inclut un camion-poubelle ( garbage collector en Shakespirien )).

2 - troisièmement : le code est illisible.

Lien vers le commentaire
Partager sur d’autres sites

Quel est le langage utilisé ?

Du C, mais je crois que le probleme est resolu il semble que ce soit betement um probleme de librairies qui netaient pas indiques

évite les boucles inconditionnelles.

pour 3 raisons :

0 - premièrement, tout ce qui est fait par goto pourrait être fait autrement . ( ici, au dessus, t'as une solution simple avec une fonction récursive )

1 - deuxièmement : L'utilisation de Goto peut entraîner des erreurs dans la gestion de la mémoire. ( surtout en Java ou dans n'importe quel langage qui inclut un camion-poubelle ( garbage collector en Shakespirien )).

2 - troisièmement : le code est illisible.

on dit pas un ramasse-miette plutôt en français?

Sinon, +1 pour l'évitement à tout prix du goto: c'est moche, c'est sale, et ça rend le code illisible. Un simple while par exemple, avec un if, ferait très bien l'affaire.

Quand tu codes, penses toujours "mon bout de code va s'insérer dans un projet de 50000 lignes, faut que j'écrive un code qui soit le plus simple à comprendre"

Lien vers le commentaire
Partager sur d’autres sites

Ou alors, dans le genre barbare tu peux aussi exploiter le coté "remarquable" de la suite de fibonnaci, pour eviter d'avoir la moindre boucle ou récursivité...

F(x) = pow((sqrt(5)+1)/2, x)/sqrt(5);

(et gérer la conversion double -> int avec le traitement de l'arrondi)

Attention tout de même, arrivé a un moment il y aura des problèmes au niveau de la gestion des arrondis pour les sqrt(5).

Enfin de mémoire (j'ai eu le même genre de problème à la fac, donc y a quelques temps déjà ^^), le problème d'arrondi n'est pas vraiment visible vu qu'avant de le rencontrer tu dépasses les capacités des int et/ou tu te retrouves avec des nombres négatif :chinois:

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

goto est un mot réservé, mais l'instruction n'existe pas.

Mais break et continue permettent de réaliser des sauts inconditionnels de la même façon :

http://java.sun.com/developer/TechTips/2000/tt0613.html

( oups, je ne devrais pas ).

Pour goto, quand j'étais tout petit, je m'amusais à faire des programmes en Basic ( qui n'avait pas encore la fonction RENUM , fonction qui permettait de réaffecter les numéros successifs des lignes) : ( 1982~1983 ).

10 PRINT " Bonjour."
20 ? " Entrez la valeur de X " 
30 INPUT X
35 IF X < 54 THEN GOTO 60
37 IF X > 54 THEN GOTO 100
40 ? " Bravo ! vous avez trouvé !"
50 GOTO 120
60 ? " Trop petit "
70 GOTO 20
100 ? " Trop grand "
110 GOTO 20
120 ? " Au revoir."

C'était une machine qui avait son système d'exploitation ( MS-DOS ) sur disquette 5"1/4.

Bon, je pense qu'il vaut mieux commencer par apprendre les syntaxes du C et de Freepascal , aujourd'hui. :iloveyou:

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

#include		<stdio.h>
#define		 CALC_LIMIT	1000000000

int		main()
{
  int		i;
  int		j;
  int		res;
  i = 0;
  j = 1;
  res = 0;

  while (res <= CALC_LIMIT)
 {
	if (res % 2 == 0)
		printf("%i\n", res);
	res = j + i;
	j = i;
	i = res;
  }
  return (0);
}

(ramnes@freebsd-6 ~/test) time ./a.out
0
2
8
34
144
610
2584
10946
46368
196418
832040
3524578
14930352
63245986
267914296

real	0m0.004s
user	0m0.000s
sys	 0m0.004s

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...