Facebook
From Sludgy Hedgehog, 3 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 64
  1. #include <iostream>
  2. #include <time.h>
  3. #include <conio.h>
  4. using namespace std;
  5. unsigned long long  fib_1(int n);
  6. unsigned long long  fib_2(int n);
  7. unsigned long long  fib_3(int n);
  8. unsigned long long  num_schmb_1 = 0;
  9. unsigned long long  num_schmb_2 = 0;
  10. unsigned long long  num_schmb_3 = 0;
  11. int main() {
  12.         clock_t start_1, finish_1;
  13.         clock_t start_2, finish_2;
  14.         clock_t start_3, finish_3;
  15.         int n;
  16.         int choice = 0;
  17.         unsigned long long fib1;
  18.         unsigned long long fib2;
  19.         unsigned long long fib3;
  20.         cout << "Ce numar din sirul lui Fibonacci doriti sa aflati: ";
  21.         cin >> n;
  22.         while (true) {
  23.                 cout << endl;
  24.                 cout << "1. Algoritmul recursiv" << endl;
  25.                 cout << "2. Algoritmul iterativ" << endl;
  26.                 cout << "3. Algoritmul divizarii" << endl;
  27.                 cout << "0. Exit" << endl;
  28.                 cout << "Optiunea: ";
  29.                 cin >> choice;
  30.                 if (choice == 1) {
  31.                         start_1 = clock();
  32.                         fib1 = fib_1(n);
  33.                         finish_1 = clock() - start_1;
  34.                         cout << "\n\nUtilizind algoritmul 1" << endl;
  35.                         cout << "Numarul lui fibonacci este: " << fib1 << endl << "S-au produs "
  36.                                 << num_schmb_1 << " interschimbari in " << (float)finish_1 / CLOCKS_PER_SEC << " secunde." << endl;
  37.                 }
  38.                 if (choice == 2) {
  39.                         start_2 = clock();
  40.                         fib2 = fib_2(n);
  41.                         finish_2 = clock() - start_2;
  42.                         cout << "\nUtilizind algoritmul 2" << endl;
  43.                         cout << "Numarul lui fibonacci este: " << fib2 << endl << "S-au produs "
  44.                                 << num_schmb_2 << " interschimbari in " << (float)finish_2 / CLOCKS_PER_SEC << " secunde." << endl;
  45.                 }
  46.                 if (choice == 3) {
  47.                         start_3 = clock();
  48.                         fib3 = fib_3(n);
  49.                         finish_3 = clock() - start_3;
  50.                         cout << "\nUtilizind algoritmul 3" << endl;
  51.                         cout << "Numarul lui fibonacci este: " << fib3 << endl << "S-au produs "
  52.                                 << num_schmb_3 << " interschimbari in " << (float)finish_3 / CLOCKS_PER_SEC << " secunde." << endl;
  53.                 }
  54.                 if (choice == 0){ return 0; }
  55.         }
  56. }
  57. unsigned long long fib_1(int n) {
  58.         if (n <= 2)  return 1 ;
  59.                 num_schmb_1++;
  60.                 return fib_1(n - 1) + fib_1(n - 2);
  61. }
  62. unsigned long long fib_2(int n) {
  63.         unsigned long long fib_num = 0;
  64.         unsigned long long k = 1;
  65.         for (int i = 0; i < n; i++) {
  66.                 fib_num = k + fib_num;
  67.                 k = fib_num - k;
  68.                 num_schmb_2 ++;
  69.         }
  70.         return fib_num;
  71. }
  72. unsigned long long fib_3(int n) {
  73.         unsigned long long i = 1;
  74.         unsigned long long j = 0;
  75.         unsigned long long k = 0;
  76.         unsigned long long h = 1;
  77.         unsigned long long t;
  78.         while (n > 0) {
  79.                 if ((n % 2) != 0) {
  80.                         t = j*h;
  81.                         j = (i*h) + (j*k) + t;
  82.                         i = (i*k) + t;
  83.                         num_schmb_3++;
  84.                 }
  85.                 t = h*h;
  86.                 h = (2 * k*h) + t;
  87.                 k = (k*k) + t;
  88.                 n = n / 2;
  89.                 num_schmb_3 ++;
  90.         }
  91.         return j;
  92.  
  93. }
  94.