Documente Academic
Documente Profesional
Documente Cultură
Staicu Ovidiu Ninel Colegiul Economic Petre S. Aurelian Slatina, jud. Olt
1. Introducere Propuse de Leonardo Pisa n 1202, numerele lui Fibonacci reprezint un ir de numere construit dup o anumit relaie de recuren ntre termeni. Numerele lui Fibonacci sunt introduse prin problema iepurilor de cas: plecnd de la o singur pereche de iepuri (un mascul i o femel) i tiind c fiecare pereche de iepuri produce n fiecare lun o nou pereche de iepuri, care devine "productiv" la vrsta de o lun, calculai cte perechi de iepuri vor fi dup n luni. Pisa arat c ntr-o situaie perfect (fr s moar iepuri), fiecare pereche de iepuri produce o alt pereche n fiecare lun. Acest tip de cretere conduce la o serie de numere cunoscute ca numere Fibonacci. Definiia 1. Se numesc numere Fibonacci numerele care fac parte din irul de numere ncepnd cu 0, 1, 1, 2, 3, ... unde fiecare numr succesiv este suma numerelor precedente. Mai precis , irul poate fi definit prin relaia de recuren:
n continuare vom prezenta unele dintre problemele de calcul ale numerelor Fibonacci. 2. Calculul numerelor Fibonacci Folosind relaia de recuren dat n Definiia 1 pentru numerele lui Fibonacci vom implementa natural un algoritm recursiv pentru a calcula cel de-al n-lea numr Fibonacci. De exemplu, urmtorul algoritm implementat n C++, returneaz cel de-al n-lea numr Fibonacci:
static int Fibonacci (int n) { if(n < 0) throw new ArgumentException("Input parameter invalid"); int N; if (n == 0) N = 0; else if (n == 1 || n == 2) N = 1; else N = Fibonacci(n - 1) + Fibonacci(n - 2); return N; }
1 www.ls-infomat.ro | www.manuale-de-informatica.ro
Pentru a calcula
, algoritmul va calcula
Timpul de executare crete exponenial cu ct ncercm s calculm un numr Fiboncci mai mare. Din acest motiv este bine s ne bazm pe o formul exact de calcul a numerelor Fibonacci cum este Formula Binnet sau varianta de calcul iterativ. Formula Binnet:
gr = ((double)1 + Sqrt(5)) / 2; grN = Pow(gr, n); gr_1 = Pow(((double)1 - gr), n); (grN-gr_1)/ Sqrt(5);
3. Condiia necesar i suficient ca un numr s fie Fibonacci Dac putem calcula valoarea exact a unui numr Fibonacci eficient, urmtoarea ntrebare care apare n mod natural este dac se d un numr natural , cum putem determina eficient dac este sau nu numr Fibonacci. n mod normal ar trebui s calculm numerele Fibbonacci pn cnd ajungem sau depim valoarea lui . Aceast abordare este ineficient i dureaz din ce n ce mai mult pentru o valoare din ce n ce mai mare. n continuare vom prezenta o condiie de testare elegant cu ajutorul creia vom stabili dac un numr este sau nu Fibonacci.
2 www.ls-infomat.ro | www.infobits.ro
Vom arta c orice ntreg pozitiv este numr Fibonacci dac i numai dac este ptrat perfect. Pentru a demonstra aceast teorem mai nti introducem dou leme, care apoi vor fi folosite pentru a demonstra teorema final. Aceast teorem a fost dat de Gessel n 1972. Lema1. Ecuaia: , este satisfcut de perechea ,
Demonstraie. Vom demonstra Lema 1 prin inducie. Verificm afirmaia pentru cazul Pentru avem perechea Fibonacci Verificm afirmaia pentru cazul Pentru avem perechea Fibonacci . nlocuind n ecuaie obinem: . nlocuind n ecuaie obinem: i demonstrm c este adevrat
Presupunem afirmaia adevrat pentru perechea pentru perechea , ceea ce este echivalent cu: Presupunem
adevrat i vom demonstra: (1) Pentru c sunt numere Fibonacci , nlocuind n (1) obinem:
Lema 2. Dac (x, y) este o pereche de numere pozitive ntregi care satisface ecuaia
atunci
Demonstraie prin inducie dup (x+y). n primul rnd, dac Dac atunci n al doilea rnd dac atunci substituind pe cu obinem: i sunt numere pozitive atunci ele pot fi , sau .
n final presupunem c Avem perechea de numere ntregi pozitive care satisfac ecuaia
este ptrat perfect. Soluia ecuaiei ptratice sau echivalent Presupunnd c y este pozitiv putem simplifica forma la Presupunnd c este numrul Fibonacci pentru un anume n, conform Lemei 1 trebuie s fie numrul Fibonacci . Pentru ca s fie numr Fibonacci (i implicit ntreg), trebuie s fie ntreg. Astfel c trebuie s fie ptrat perfect. Invers, presupunnd c pozitiv ntreg, trebuie s fie de asemenea un numr pozitiv ntreg. Conform regulilor de baz ale adunrii i nmulirii avem: Dac este impar, atunci este impar. Adunnd sau scznd 4 obinem tot un numr impar. De aceea este impar i ptrat perfect. Dac extragem radical dintr-un numr ptrat perfect i impar obinem un numr impar. Deci n final avem: este ptrat perfect i tiind c este un numr este
Cum este numr impar adunnd nc o valoare impar obinem un numr par care care atunci cnd se mparte la 2 d ca rezultat un numr ntreg.
4 www.ls-infomat.ro | www.infobits.ro
Dac este par, atunci este par. Adunnd sau scznd 4 obinem tot un numr par. De aceea este par i ptrat perfect. Dac extragem radical dintr-un numr ptrat perfect i par obinem un numr par. Deci n final avem:
Cum x este numr par adunnd nc o valoare par, obinem un numr par care atunci cnd se mparte la 2 d ca rezultat un numr ntreg. tiind c este un ntreg pozitiv, conform lemei 2, ambele valori numere Fibonacci. i trebuie s fie
Iat sursa programului n C++ care verific dac un numr este Fibonacci conform teoremei demonstrate mai sus:
#include <iostream> #include <cmath> using namespace std; bool EsteFib(double x) { double x1=5* pow(x,2.0)+4; double x2=5* pow(x,2)-4; long radical_x1=(long )sqrt(x1); long radical_x2=(long )sqrt(x2); return (radical_x1*radical_x1==x1)||(radical_x2*radical_x2==x2)? true:false; } int main() { int n; cout<<"Introduceti numarul:"; cin>>n; EsteFib(n)==1 ? cout<<n<<" este numar Fibonacci": cout<<n<<" nu este numar Fibonacci"; return 0; }
Bibliografie 1. Phillip James, Department of Computer Science, Swansea University When is a number Fibonacci ?, 2009: http://www.cs.swan.ac.uk 2. http://www.maths.surrey.ac.uk/
5 www.ls-infomat.ro | www.infobits.ro