Séquence de Fibonacci en C

Voici le résultat attendu:

texte alternatif http://soffr.miximages.com/c/f1lfuh.jpg

Nous devons créer un programme C qui calcule pour la séquence de Fibonacci. Nous ne pouvons utiliser que 3 variables et nous ne sums PAS autorisés à utiliser des boucles. Et je ne sais pas quoi faire et comment commencer.

J’espère que vous pourrez m’aider. : /

En supposant que vous utilisez des entiers non signés sur 32 bits, le 48ème nombre de Fibonacci provoquera un dépassement d’entier. Cela rend parfaitement possible d’utiliser une table de recherche avec toutes les valeurs précalculées (manuellement).

Utiliser la récursivité:

texte alternatif


Version en langage C / C ++:

int fib(int a) { if (a == 0) return 0; if (a == 1) return 1; return fib(a - 1) + fib(a - 2); } 

Appliquer la suggestion à partir de cette réponse

Version en langage C:

 /* * -1 is a error handler */ int fib(int a) { if (a < 0 || a > 47) return -1; if (a == 0) return 0; if (a == 1) return 1; return fib(a - 1) + fib(a - 2); } 

Version en langage C ++:

 int fib(int a) { if (a < 0) throw new std::out_of_range("Fibonacci is not defined for negative sign values."); if (a > 47) throw new std::overflow_error("Fibonacci for this value was overflow the integer."); if (a == 0) return 0; if (a == 1) return 1; return fib(a - 1) + fib(a - 2); } 

Je soupçonne que si vous ne pouvez pas utiliser de boucles, votre professeur / enseignant vous a demandé d’utiliser la récursion. Sinon, il suffit simplement de rechercher la formule appropriée, ce qui n’a aucun sens dans une classe de programmation.

Si la récursivité est autorisée, je vous recommande vivement de lire ce tutoriel (en supposant que vous ne le connaissiez pas).

Si les boucles et la récursivité ne sont pas autorisées, prenez la définition de la séquence de fibonacci et faites-la à la main … c’est ridiculement ennuyeux et sans intérêt, mais c’est la solution la plus simple dans ces ressortingctions.

 a = 0; // 0 b = 1; // 1 a = a + b; // 1 b = a + b; // 2 a = a + b; // 3 b = a + b; // 5 

et ainsi de suite: b détient le n-ième et a le (n-1) -ième nombre. (Copier-coller a = a+b; b = a+b; combien de fois vous avez besoin …) Copier-coller des fragments de code est autorisé?

… ( modifier ) …

Bien sûr, cette réponse montre juste à quel sharepoints produits ridicules peuvent être obtenus si nous mettons trop de ressortingctions. Si vous ne connaissez pas la récursivité, vous devez l’apprendre définitivement. Vous pouvez également vous en tenir à des calculs mathématiques précis (comme le montre une autre réponse), mais la récursivité est un outil puissant que les programmeurs doivent connaître de toute façon, et l’approche récursive est plus intuitive que l’utilisation de «ruses» mathématiques.

utilisez http://www.research.att.com/~njas/sequences/b000045.txt en tant que fichier de données;)

http://mathworld.wolfram.com/BinetsFibonacciNumberFormula.html

que vous pouvez copier ici

http://cboard.cprogramming.com/cplusplus-programming/108426-binets-formula.html

 long double f(short N) { double phi = (1+pow(5,0.5))/2; return ceil((pow(phi,N) - pow(1-phi,N))/pow(5,0.5)); } 

bien sûr, ce n’est que mathématique, mais il calcule fib (N) sans récursivité et boucles .. vous avez toujours besoin d’un moyen d’imprimer toutes les valeurs de fib (1) .. fib (n) cependant

ce que votre professeur veut, c’est probablement la récursion.

Puisque la boucle et la récursivité ne sont pas autorisées,

 int fib(int n) { int fk1 = 0, fk0 = 1; main_sub3: fk1 += fk0; fk0 = fk1 - fk0; if (n > 0) { -- n; goto main_sub3; 

* rapace *