Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.
Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.
Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.
Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.
Meniu shortcuturi | ? |
Căutare probleme sau utilizatori | / |
Navigare printre rezultatele căutării | ↑, ↓ |
Meniu de contact și feedback | CTRL + Shift + F |
Ieșire din meniuri | Esc |
Setări editor | CTRL + Shift + S |
Schimbare stil editor | CTRL + Shift + E |
Șabloane de cod | CTRL + Shift + 1/2/3 |
Golire editor | CTRL + Shift + 4 |
Dându-se un număr natural n
, să se determine al n
-lea termen din șirul Fibonacci.
Exemplu. Pentru n = 9
, F(n) = F(9) = 34
.
Șirul Fibonacci, cunoscut după matematicianul Leonardo Bonacci, este șirul definit astfel:
F(1)
și F(2)
, sunt egali cu 1
.F(n) = F(n - 1) + F(n - 2)
.1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …
.46
de termeni încap în int
— așadar de regulă se lucrează cu variabile de tip long long
.n
-lea termen Fibonacci (cu vector)Vom crea un vector în care al i
-lea element reprezintă al i
-lea termen Fibonacci. Vom genera acest vector până la n
.
#include <iostream>
using namespace std;
int main()
{
//Declarăm și citim variabilele
int n, fibo[51];
cin >> n;
//Generăm șirul
fibo[1] = fibo[2] = 1;
for(int i = 3; i <= n; i++) {
fibo[i] = fibo[i - 1] + fibo[i - 2];
}
//Afișăm al n-lea termen
cout << fibo[n];
return 0;
}
n
-lea termen Fibonacci (recursiv)Soluția recursivă este foarte ineficientă, deoarece se recalculează aceeași termeni de multe ori. Cu toate acestea, este un exemplu bun de a demonstra recursivitatea:
#include <iostream>
using namespace std;
int fibo(int n) {
if(n == 1 || n == 2) { //Cazuri particulare
return 1;
}
return fibo(n - 1) + fibo(n - 2);
}
int main()
{
//Declarăm și citim
int n;
cin >> n;
//Afișăm al n-lea termen
cout << fibo(n);
return 0;
}
Să analizăm grafic ce se întâmplă dacă apelăm fibo(5)
:
Observăm că în timpul calculării lui fibo(5)
, apelăm fibo(4)
și fibo(3)
. Când apelăm fibo(4)
, apelăm din nou fibo(3)
, pe care l-am calculat deja. Acesta este un exemplu simplu în care se observă faptul că se repetă calcularea anumitor termeni, dar pentru calcularea fibo(30)
, de exemplu, poate lua până la un minut — operație ce, în fond, doar face 30
de sume.