Sunteți pe pagina 1din 6

Algoritmul de generare a numerelor șirului lui Fibonacci

Ceban Ana- Liceul Teoretic „ Onisifor Ghibu” Orhei,


e-mail: moderator.inform@gmail.com

Abstract
Ideea ca universul e guvernat de numere a fascinat, începînd cu Pitagora, pe matematicieni, fizicieni,
filozofi și teologi. Probabil că nici un numar nu ilustreaza mai bine aceasta idee și nu a fost înconjurat de
atata faimă și mister ca numarul phi, cunoscut și sub numele de „secțiunea de aur”. Definit de Euclid cu
mai bine de doua mii de ani în urmă, phi(1,618...) pare implicat peste tot în natură: de la cochiliile
melcilor și dispunerea petalelor florilor, pînă la forma galaxiilor. Nici artele plastice sau muzica nu rămîn
în afara „razei de acțiune” a uimitorului număr.

1. Introducere
Ce au în comun aranjamentul petalelor unui trandafir, dispunerea semințelor într-o floare a soarelui,
brocoliul chinezesc, pictura lui Salvador Dali  „Cina cea de taină“,  „Omul vitruvian“ al lui Leonardo
da Vinci,  cochiliile spiralate ale moluștelor, vortexul unei galaxii și traiectoria șoimilor când coboară spre
pradă? Cine nu a observat și nu a rămas plăcut surprins câtă simetrie și ordine există în natură? Poate că
mulți dintre noi deja am dedus că natura a folosit în ”hazardul” ei formule matematice ce au creat în final
tot ceea ce ne înconjoară. Oamenii încearcă permanent să înţeleagă natura şi legile acesteia, să simtă
ritmurile cosmice, să înţeleagă de fapt mai profund viaţa, pentru a ajunge la o armonie cu mediul
înconjurător.

2. Șirul Fibonacci. Relația de recurență


Propuse de Leonardo Pisa în 1202, Sirul lui Fibonacci este un șir de numere întregi (F1,F2,…,Fn,
…),definit recurent astfel: primii doi termeni sunt egali cu 1, apoi fiecare termen începînd cu al
treilea,este egal cu suma dintre precedentul și anteprecedentul său .Un sir a1,a2,…,an,… este o
succesiune de valori numite elementele șirului, aranjate într-o oridine definita.Fiecare element ocupă în
cadrul șirului o poziție fixată, care se numește rangul elemntului. Unele șiruri pot fi definite cu ajutorul
unor formule care exprimă orice termen al șirului, începînd cu un anumit rang, în fucție de termenul
precendent sau recurenta. Pentru a putea defini recurent un sir, mai trebuie sa indicăm primul termen
sau primii termeni.
Pentru un termen oarecare Fk (termenul de rang k),precedentul său este Fk-1 (de rang k-1),iar
anteprecedentul sau este Fk-2 (de rang k-2).Astfel, F1=1, F2=1 si Fk=Fk-1+Fk-2;k>3.
O relație de recurență înglobează atît formula de calcul,cît și valorile termenilor definiți separat:
Fk = - 1, pentru k = 1 si 2
- Fk-1 + Fk-2, pentru k >= 3
Pentru a calcula recursiv un termen oarecare Fk, avem nevoie de termenii precedenți Fk-1 si Fk-2
Function F(x:integer):integer;
Begin
if x=1 or x=2 then Fx=1;
if k>=3 then Fx=Fx-1 + Fx-2;
end;
Termenii Fk-1 si Fk-2 se pot afla prin același algoritm, doar dacă k= K-1 și k= K-2 .Prin urmare,
algoritmu care calculează termenul Fk trebuie să se auto- apeleze de doua ori , în scopul determinării
termenilor Fk-1 si Fk-2.
Factorialul unui numar natural k este k!= 1*2*3*…*(k-1)*k (produsul numerelor nat. pana la k), care se
mai poate scrie : k!= k*(k-1)*…*3*2*1. Dar (k1)*…*3*2*1 este tocmai (k-1)! De aici se deduce o așa
numită relație de recurență: k!=K*(k-1)!.
Știind că 0!= 1 ,obținem relația de recurență:
Function F(x:integer):integer;
Begin
if x=0 then F(x):=1;
if x > 0 then F(x):=x*(x-1);
end;
Pentru a calcula suma cu n termini,de exemplu suma primelor n numere naturale impare, deducem
urmatoarea relație de recurență:
Sn= 0 npentru n=0
(sn-1)+Sn-1 ,pentru n>0
Function S(x:integer):integer;
begin
if n=0 then S:=0;
if n>0 then S:=(2n-1) + Sn-1;
end;
Se considera șirurile definite recurent astfel: a0=a; b0=b, a,b>0:
an=(a (n-1)+b(n-1))/2 , bn=√a(n-1)*b(n-1).
Sa se scrie un program care să citească a, b si n și să se calculeze an și bn.
var a,b:real; n:integer; begin
function bn(n:integer):real; if n=0 then bn:=b
forward; else bn:=sqrt(an(n-1)*bn(n-1));
function an(n:integer):real; end;
begin begin
if n=0 write(‘a=‘); readln(a);
then an:=a write(‘b=‘); readln(b);
else an:=(an(n-1+bn(n-1))/2 write(‘n=‘); readln(n);
end; writeln(an(n):5:10,’ ‘,bn(n):5:10);
function bn(n:integer):real; end.
3. Șirul lui Fibonacci și secțiunea de aur
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, …
Aceasta secvență e realizată prin alegerea a doua numere și repartizarea celorlalte numere prin
regula ca fiecare numar trebuie sa fie suma celor doua numere precedente. Aceasta regulă simplă
generează o secvență numerică ce are multe calități surprinzatoare. Acestea ar fi o parte din ele:
– luati oricare trei numere adiacente din secventa, ridicați la pătrat numarul din mijloc, înmulțiți pe
primul cu al treilea numar. Diferența dintre cele doua rezultate e întotdeauna 1.
– luați oricare patru numere adiacente din secventă. Înmulțiți numerele din capete. Înmulțiți pe
cele din interior. Primul rezultat va fi mai mare sau mai mic cu 1 decat al doilea rezultat.
– suma a oricare zece numere adiacente e egala cu al șaptelea număr din secvența înmulțit de 11
ori.
Grecii antici au găsit un răspuns pe care ei îl considerau corect. Dacă părții stângi a segmentului îi
atribuim lungimea u=1, atunci partea dreaptã va avea o lungime v=0,618… Despre un segment partiționat
astfel spunem că este împărțit în Secțiunea (sau Proporția, Diviziunea) de aur (divină).
Problema înmulțirii iepurilor este departe de a fi realistă, chiar dacă a dus la o descoperire atât de
importantă cum este acest şir. Dar cunoscutul şir al lui Fibonacci, generat de aceasta problemă, are
numeroase aplicaţii, deosebit de interesante. Unul dintre cele mai importante aspecte este legatura dintre
numerele Fibonacci şi secţiunea de aur.
Secventa Fibonacci e generată începînd cu 0 si 1 și aplicînd, în mod repetat, regula conforma careia
fiecare număr nou e egal cu suma ultimelor doua numere:
0+1 = 1, 1+1 = 2, 1+2 = 3, 2+3 = 5, etc., ceea ce produce secventa 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144...
Secvența proporțiilor succesive a numerelor din aceasta secvență, adică 1/1 = 1; 2/1 = 2; 3/2 = 1.5; 5/3 =
1.666… ; 8/5 = 1.6; 13/8 = 1.625; 21/13 = 1.615…; 34/21 = 1.619…; 55/34 = 1.6176…; 89/55 = 1.6181; …, tinde
într-adevar spre P.A.

4. Aplicații Pascal și Delphi ale șirului Fibonacci

Aplicaţiile numărului de aur, de fapt ale raportului ca atare, se regăsesc la punerea în proporţie a
lucrărilor în arhitectură, pictură, sculptură, estetică şi artă în general, ceea ce confirmă interesul manifestat
de’a lungul timpului pentru acest număr.

Generarea tradițională a șirul lui Fibonacci:


Ca și variabile avem nevoie de ultimele două valori ale șirului, pe care le putem reține în F1 și F2.
Apoi avem nevoie de o variabilă temporară, aici numită FTemp, pentru a reține ultima valoare - cea care
va defini elementul următor.

Apoi avem nevoie doar de o variabilă în care vom memora poziția elementului dorit (el) și o altă
variabilă temporară care ne va fi variabila de ciclare.

Fiindcă generarea elementului de pe poziția x înseamnă doar să calculăm suma celor doi predecesori
ai săi, tot ce trebuie să facem e să aflăm această sumă până ce ajungem la rangul cerut.

În cazul în care rangul, sau indexul, cerut e 0 sau 1, știind valorile din definiția funcției, pur și simplu
le tipărim. Dacă acesta este mai mare sau egal cu 2, pur și simplu intrăm într-un ciclu unde:

1. Salvăm valoarea ultimului element într-o variabila temporară.


2. Ultimul element devine cel curent, adică el va reține suma dintre el, elementului de pe poziția n -
1, și penultimul element, cel de pe poziția n - 2. Adică ultimul element devine cel curent.
3. Penultimul element devine ultimul.

La sfârșitul ciclului, pur și simplu afișăm valoarea ultimul element, care, după ce am scris mai sus, de
fapt va fi elementul curent. 

O altă abordare ar cuprinde păstrarea valorilor într-un vector, însă aceasta ne-ar limita. Dacă avem un
vector de 100 de elemente ar consuma destul de multă memorie, iar pe de altă parte numerele din șirul lui
Fibonacci ajung destul de repede, destul de mari. Iar integer e limitat la valoarea maximă de doar 32 768.
Iar al 24-lea element are deja valoarea 46 368. Și tipul de date word nu ar ajuta mai mult.

La generarea primilor n termeni a sirului Fibonacci, trebuie să tipărim la fiecare pas valoarea lui F2: 

5. Problema iepurilor lui Fibonacci


Numerele lui Fibonacci sunt introduse prin „problema iepurilor de casă”: plecând 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 vârsta de o lună, calculaţi câte perechi de iepuri vor fi după
n luni.
Pisa arată că într-o situaţie perfectă (fără să moară iepuri), fiecare pereche de iepuri produce o altă
pereche în fiecare lună. Acest tip de creştere conduce la o serie de numere
cunoscute ca numere Fibonacci.
La sfârșitul primei luni, iepurii se împerechează dar încă sunt o pereche;
1. La sfârșitul celei de-a doua luni femela dă naştere unei noi perechi
de iepuri, si deci numărul perechilor ajunge la 2;
2. La sfârșitul celei de-a treia luni femela mamă mai dă nastere la o pereche şi astfel se ajunge la 3
perechi;
3. După a patra lună femela mamă mai dă naștere unei perechi, dar și femela în vârstă de două luni
dă naştere de asemeni unei perechi, etc;

Numărul perechilor de pe câmp la începutul fiecărei luni este 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
Aplicație Pascal
program iepurii_lui_fibonaccei; begin
var luni : integer; i := i + j;
function ie_fib(luni : integer) : longint; j := i - j;
var i, j : longint; dec(luni);
begin end;
i:=1; j:=1; ie_fib := i;
if luni < 1 then end;
begin BEGIN
ie_fib:=0; write('Nr de luni:');readln(luni);
exit; writeln('peste ', luni, ' vor fi ', ie_fib(luni), '
end; iepuri');
while luni > 0 do END.

Aplicație Delphi

6. Concluzii
Problema înmulțirii iepurilor este departe de a fi realistă, chiar dacă a dus la o descoperire atât de
importantă cum este acest şir. Dar cunoscutul şir al lui Fibonacci, generat de aceasta problemă, are
numeroase aplicaţii, deosebit de interesante. Unul dintre cele mai importante aspecte este legatura dintre
numerele Fibonacci şi secţiunea de aur.

BIBLIOGRAFIE
[1] Mihnea Moroianu,Secțiunea de aur, 2007
[2] Programa_BAC_Informatica_2007
[3] Ioan Dzițac, Ioan Mang, Gergeta Sadoveanu, Didactica Informaticii, Ed.Universității din Oradea,
2003

S-ar putea să vă placă și