Generarea șirului Fibonacci generalizat în C++
Dându-se două numere naturale, f1
și f2
, să se genereze șirul Fibonacci
generalizat, cu primii doi termeni f1
și f2
și termenul general f(n) = f(n - 1) + f(n - 2)
.
Exemplu. Pentru f1 = 3
și f2 = 1
, primele elemente ale șirului sunt 3 1 4 5 9 14 23…
(4 = 3 + 1
, 5 = 1 + 4
, 9 = 4 + 5
, …).
Vom genera doar primele 10
elemente pentru a exemplifica algoritmul.
Vom prezenta două metode — una cu vectori și una folosind doar trei variabile.
Metoda 1 (vectori)
Vom crea un șir care să conțină șirul Fibonacci generalizat, în care primii
doi termeni sunt f1
și f2
. Vom aplica formula termenului general f[n] = f[n - 1] + f[n - 2]
pentru a genera următorii termeni. La final, vom afișa
vectorul generat.
Implementare C++
#include <iostream>
using namespace std;
int main()
{
//Declarăm și citim primii doi termeni
int f1, f2;
cin >> f1 >> f2;
//Formăm șirul Fibonacci generalizat
int f[11];
f[1] = f1; //Atribuim primele două valori în șir
f[2] = f2;
for(int i = 3; i <= 10; i++) { //Folosind termenul general al șirului, generăm restul elementelor
f[i] = f[i - 1] + f[i - 2];
}
//Afișăm șirul f la final
for(int i = 1; i <= 10; i++) {
cout << f[i] << " ";
}
return 0;
}
Metoda 2 (trei variabile)
Observăm că dacă avem doi termeni în două variabile, după ce generăm noul termen, nu mai avem nevoie de termenul mai vechi. Astfel, putem să procedăm astfel:
- Creăm o variabilă auxiliară
aux
, care ia valoarea termenului curent (f1 + f2
); - Variabila
f1
preia valoarea luif2
(f2
devine noulf1
); - Variabila
f2
preia valoarea luiaux
(aux
este acumf1
); - Afișăm
f2
(elementul curent); - Repetăm pașii până când generăm primii
n
termeni.
Vom afișa înainte primii doi termeni.
Implementare C++
#include <iostream>
using namespace std;
int main()
{
//Declarăm și citim primii doi termeni
int f1, f2;
cin >> f1 >> f2;
//Formăm și afișăm șirul Fibonacci generalizat
cout << f1 << " " << f2 << " "; //Afișăm primii doi termeni
for(int i = 3; i <= 10; i++) { //Generăm restul termenilor
int aux = f1 + f2;
f1 = f2;
f2 = aux;
cout << aux << " "; //Afișăm noul element generat
}
return 0;
}
DS
Autorul acestei lecții
Dominic Satnoianu
Această lecție a fost redactată de către Dominic Satnoianu.
© 2021 – 2025 Aspire Education Labs SRL. Toate drepturile rezervate.
Așa cum este specificat și în termeni și condiții, conținutul acestei pagini este protejat de legea drepturilor de autor și este interzisă copierea sau modificarea acestuia fără acordul scris al autorilor.
Încălcarea drepturilor de autor este o infracțiune și se pedepsește conform legii.
Comentarii 0