#include <iostream>
#include <chrono> // Biblioteka do pomiaru czasu na poziomie [ns]
using namespace std;
int Fibonacci (int N)
{
int a_prepre = 0 ,
a_pre = 1 ;
int a_aktualny = a_prepre + a_pre ;
for (int i = 3; i <= N ; i++)
{
a_prepre = a_pre;
a_pre = a_aktualny;
a_aktualny = a_prepre + a_pre;
}
return a_aktualny;
}
int Fibonacci_rekurencja (int N)
{
if (N == 0) return 0;
if (N == 1) return 1;
return Fibonacci_rekurencja (N-1) + Fibonacci_rekurencja (N-2);
}
int main ()
{
int N;
cout << "Podaj pozadany wyraz ciagu Fibonacciego: ";
cin >> N;
int Wynik_funkcja ;
int Wynik_rekurencja ;
/*** Uwaga: mierząc czas operacji, ważne aby nie dokładać zbędnych działań, *
* np. nic nie wyświetlać, nie deklarować obiektów itd. ***/
auto TimeStamp1 = chrono::high_resolution_clock::now (); // Chwila czasu T1
Wynik_funkcja = Fibonacci (N);
auto TimeStamp2 = chrono::high_resolution_clock::now (); // Chwila czasu T2
Wynik_rekurencja = Fibonacci_rekurencja (N);
auto TimeStamp3 = chrono::high_resolution_clock::now (); // Chwila czasu T3
cout << "Wynik przez funkcje : " << Wynik_funkcja << endl;
cout << "Wynik przez rekurencje : " << Wynik_rekurencja << endl;
cout << "Czas przez zwykla funkcje: "
<< chrono::duration_cast<chrono::nanoseconds> (TimeStamp2 - TimeStamp1).count() << " ns" << endl;
cout << "Czas przez rekurencje : "
<< chrono::duration_cast<chrono::nanoseconds> (TimeStamp3 - TimeStamp2).count() << " ns" << endl;
return 0;
}