Created
April 4, 2021 18:47
-
-
Save Kielx/34215efb64a8307867593dbffb46c773 to your computer and use it in GitHub Desktop.
Lab3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <time.h> | |
long int fibIt(int n) | |
//Funkcja oblicza i zwraca okreslony wyraz ciagu Fibonacciego metoda iteracyjna | |
{ | |
long int i, t1 = 0, t2 = 1, nastepnyWyraz; | |
for (i = 1; i <= n; ++i) | |
{ | |
nastepnyWyraz = t1 + t2; | |
t1 = t2; | |
t2 = nastepnyWyraz; | |
} | |
return t1; | |
} | |
long int fibRe(int n) | |
{ | |
if (n <= 1) | |
return n; | |
return fibRe(n - 1) + fibRe(n - 2); | |
} | |
void wypiszCzasyFibo(int wyrazCiagu) | |
{ | |
clock_t tik = clock(); | |
int wyraz1 = fibRe(wyrazCiagu); | |
clock_t tak = clock(); | |
double czasRe = ((double)(tak - tik) / CLOCKS_PER_SEC); | |
tik = clock(); | |
int wyraz2 = fibIt(wyrazCiagu); | |
tak = clock(); | |
double czasIt = ((double)(tak - tik) / CLOCKS_PER_SEC); | |
printf("Wyraz %d ciągu fibonacciego to %d w wariancie rekurencyjnym jak i %d w wariancie iteracyjnym.\n", wyrazCiagu, wyraz1, wyraz2); | |
printf("Od początku wywołania funkcji do ich zakończenia:\n"); | |
printf("Upłynęło: %f sekund w wariancie rekurencyjnym\n", czasRe); | |
printf("Upłynęło: %f sekund w wariancie iteracyjnym\n", czasIt); | |
} | |
void zad2() | |
{ | |
wypiszCzasyFibo(5); // Rekurencja - 0.000003s, Iteracja - 0.000001s | |
wypiszCzasyFibo(10); // Rekurencja - 0.000002s, Iteracja - 0.000001s | |
wypiszCzasyFibo(20); // Rekurencja - 0.000043s, Iteracja - 0.000001s - Czas zaczyna się różnić | |
wypiszCzasyFibo(40); // Rekurencja - 0.677339s, Iteracja - 0.000001s - Funkcja rekurencyjna trwa już niemalże sekundę | |
wypiszCzasyFibo(45); // Rekurencja - 7.695842s, Iteracja - 0.000001s - | |
wypiszCzasyFibo(47); // Rekurencja - 20.013487s, Iteracja - 0.000001s - | |
//Dla wartości 47 funkcja rekurencyjna trwa już 20 sekund, zaś iteracyjna dalej w czasie 1x10^-6s | |
} | |
unsigned long long silniaIt(int n) | |
{ | |
int i; | |
unsigned long long silnia = 1; | |
for (i = 1; i <= n; ++i) | |
{ | |
silnia *= i; | |
} | |
return silnia; | |
} | |
unsigned long long silniaRe(int n) | |
{ | |
if (n <= 1) | |
{ | |
return n; | |
} | |
else | |
return (silniaRe(n - 1) * n); | |
} | |
void wypiszCzasySilnia(int liczbaSilni) | |
{ | |
clock_t tik = clock(); | |
unsigned long long wyraz1 = silniaRe(liczbaSilni); | |
clock_t tak = clock(); | |
double czasRe = ((double)(tak - tik) / CLOCKS_PER_SEC); | |
tik = clock(); | |
unsigned long long wyraz2 = silniaIt(liczbaSilni); | |
tak = clock(); | |
double czasIt = ((double)(tak - tik) / CLOCKS_PER_SEC); | |
printf("Silnia %d to %llu w wariancie rekurencyjnym jak i %llu w wariancie iteracyjnym.\n", liczbaSilni, wyraz1, wyraz2); | |
printf("Od początku wywołania funkcji do ich zakończenia:\n"); | |
printf("Upłynęło: %f sekund w wariancie rekurencyjnym\n", czasRe); | |
printf("Upłynęło: %f sekund w wariancie iteracyjnym\n", czasIt); | |
} | |
void zad1() | |
{ | |
wypiszCzasySilnia(1); // Rekurencja - 0.000002s, Iteracja - 0.000001s | |
wypiszCzasySilnia(10); // Rekurencja - 0.000001s, Iteracja - 0.000001s | |
wypiszCzasySilnia(50); // Rekurencja - 0.000002s, Iteracja - 0.000001s | |
wypiszCzasySilnia(60); // Rekurencja - 0.000001s, Iteracja - 0.000000s | |
wypiszCzasySilnia(65); // Rekurencja - 0.000001s, Iteracja - 0.000001s | |
/* Wszystkie funkcje sa wywoływane niemalże natychmiastowo | |
// W przypadku większych wartości standardowe największe wartośći unsigned long long nie są w stanie | |
przyjąć zwracanych liczb z funkcji */ | |
wypiszCzasySilnia(10000); // Rekurencja - 0.000152s, Iteracja - 0.000024s | |
wypiszCzasySilnia(100000); // Rekurencja - 0.001959s, Iteracja - 0.000317s | |
wypiszCzasySilnia(200000); // Rekurencja - 0.003787s, Iteracja - 0.000477s | |
} | |
int main() | |
{ | |
zad1(); | |
printf("\n\n"); | |
zad2(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment