Problem z wydajnością i szybkością działania programu.
Ostatnio zmodyfikowano 2016-06-03 19:02
Cantharis Temat założony przez niniejszego użytkownika |
Problem z wydajnością i szybkością działania programu. » 2016-06-03 14:15:14 Miałem za zadanie napisać program (jestem wielkim nowicjuszem), w którym rozwiąże dowolnie wybrany problem używając iteracji i rekurencji. Program działa jednak przy wyliczaniu już 40/45 wyrazu ciągu Fibonacciego (taki wybrałem temat) schodzi mu co raz dłużej. #include <iostream> #include <cstdio> #include <iomanip> #include <math.h> #include <conio.h> #include <stdlib.h> using namespace std;
long double fibonaccirek( int z ) { if( z == 1 || z == 2 ) return 1; else return fibonaccirek( z - 1 ) + fibonaccirek( z - 2 ); }
int main()
{ system( "color B5" ); long double fibonacciite[ 100000 ]; int x; fibonacciite[ 0 ] = 1; fibonacciite[ 1 ] = 1; cout << "Podaj ktory wyraz ciagu chcesz obliczyc: "; cin >> x; cout << setprecision( 1000000 ); for( int i = 2; i < x; i++ ) { fibonacciite[ i ] = fibonacciite[ i - 1 ] + fibonacciite[ i - 2 ]; } system( "cls" ); cout << "Podany wyraz ciagu obliczony rekurencyjnie: " << fibonaccirek( x ) << endl; cout << endl << "Podany wyraz ciagu obliczony iteracyjnie: " << fibonacciite[ x - 1 ] << endl; if( x == 1 ) { cout << endl << "Zlota liczba nie istnieje za malo wyrazow ciagu" << endl; } else { cout << endl << "Zlota liczba dla podanej ilosci wyrazow obliczona rekurencyjnie: " << fibonaccirek( x ) / fibonaccirek( x - 1 ) << endl; cout << endl << "Zlota liczba dla podanej ilosci wyrazow obliczona iteracyjnie: " << fibonacciite[ x - 1 ] / fibonacciite[ x - 2 ]; } cin.ignore(); getchar(); return 0; }
Jeżeli jest coś co mógłbym zmienić by usprawnić ten program proszę o pomoc :). |
|
mateczek |
» 2016-06-03 14:30:00 cout << endl << "Zlota liczba dla podanej ilosci wyrazow obliczona rekurencyjnie: " << fibonaccirek( x ) / fibonaccirek( x - 1 )
cout << "Podany wyraz ciagu obliczony rekurencyjnie: " << fibonaccirek( x ) << endl;
|
|
Cantharis Temat założony przez niniejszego użytkownika |
» 2016-06-03 14:40:40 Jak powinienem to zapisać by obejść te powtórki?? |
|
mateczek |
» 2016-06-03 15:20:53 A po co?? Skoro masz zaprezentować działanie to się nada. A jak chcesz wydajny program to zrób tylko na pętli for jednokrotne liczenie.
|
|
pekfos |
» 2016-06-03 16:13:18 Jak powinienem to zapisać by obejść te powtórki?? |
Jest coś takiego jak zmienna. Możesz zapisać do niej wartość. A najlepiej nie rób zmiennej, tylko ich tablicę, tak jak zrobiłeś w metodzie iteracyjnej. Tam buforujesz wyniki, by niczego nie liczyć 2 razy, zrób to samo w podejściu rekurencyjnym. |
|
Cantharis Temat założony przez niniejszego użytkownika |
» 2016-06-03 19:02:01 Ok, dziękuje wszystkim za pomoc i zamykam temat :). |
|
« 1 » |