N-ty wyraz ciągu Fibonacciego.
Ostatnio zmodyfikowano 2016-12-11 22:01
wokub Temat założony przez niniejszego użytkownika |
N-ty wyraz ciągu Fibonacciego. » 2016-12-11 21:02:23 Siamka. Mam do zrobienia zadanie, w którym poprzez wzór rekurencyjny (wymagane) mam określić wartość 45. elementu ciągu Fibonacciego. Jest tego dużo na internecie, jednak zostało podkreślone, że wykonanie tego w inny sposób będzie lepiej postrzegane. Dlatego chciałbym się spytać, czy ktoś jest w stanie powiedzieć mi, co napisałem nie tak w tym kodzie? Bez wysyłania nowego całego zadania, ściągniętego z internetu. Interesuje mnie ten konkretny napisany przeze mnie kod. Z góry wielkie dzięki. #include<iostream> #include<math.h> #include<cstdlib>
int ciagFibonacciego( int n ) { if( n == 0 ) return 0; if( n == 1 ) return 1; return ciagFibonacciego( n - 1 ) + ciagFibonacciego( n - 2 ); }
int main() { int n = 45; int ciag; ciag = ciagFibonacciego( n ); std::cout << " 45. wyraz ciagu Fibonacciego ma wartosc: " << ciag << std::endl; std::cin.get(); return 0; }
Zresztą teraz przeszukałem internet (czego próbowałem uniknąć) i zauważyłem, że pierwszy lepszy kod na internecie wygląda tak: #include<iostream> #include<cstdlib> using namespace std;
int fib( int n ) { if( n < 3 ) return 1; return fib( n - 2 ) + fib( n - 1 ); }
int main() { int n; cout << "Podaj nr wyrazu ciągu: "; cin >> n; cout << n << " wyraz ciągu ma wartość " << fib( n ) << endl; system( "pause" ); return 0; }
Ciut podobnie do mojego. Czy da się to napisać jakoś bardziej oryginalnie czy jest to jedyna możliwość? Oczywiście pomijając jakieś super-zaawansowane kody. Zresztą wypróbowałem ten kod (drugi) i wyświetla n = 20 np, ale 45 już nie. Może to w tej liczbie jest problem. |
|
wokub Temat założony przez niniejszego użytkownika |
» 2016-12-11 21:35:16 Aktualizacja: #include<iostream> #include<math.h> #include<cstdlib>
int ciagFibonacciego( int n ) { if( n == 0 ) return 0; if( n == 1 ) return 1; return ciagFibonacciego( n - 1 ) + ciagFibonacciego( n - 2 ); }
int main() { int ciag; int n = 20; ciag = ciagFibonacciego( n ); std::cout << " 45. wyraz ciagu Fibonacciego ma wartosc: " << ciag << std::endl; std::cin.get(); return 0; }
Mój kod działa przy liczbie 20. Co zrobić, by działał przy 45? Jakiś inny format niż int? Temat do zamknięcia. Kod działa, po prostu długo liczy (15 sekund) |
|
mateczek |
» 2016-12-11 22:01:28 Ten algorytm jest zrąbany na maxa. Jeśli wklepałem 45 czekałem z minute a dla 60 to już chyba z 10 mintut mi liczy. To jest idealny przykład jak można zarąbać na śmierć komputer w sumie prostymi obliczeniami :) heheh #include<iostream> #include<cstdlib> using namespace std;
unsigned long long fib( int n ) { if( n < 3 ) return 1; return fib( n - 2 ) + fib( n - 1 ); }
unsigned long long fib2( int n ) { static unsigned long long n_2 = 1; static unsigned long long n_1 = 1; static unsigned long long index = 2; unsigned long long act = n_2 + n_1; index++; if( index == n ) return act; n_2 = n_1; n_1 = act; fib2( n ); }
int main() { int n; cout << "Podaj nr wyrazu ciągu: "; cin >> n; cout << n << " wyraz ciągu ma wartość " << fib2( n ) << endl; cout << n << " wyraz ciągu ma wartość " << fib( n ) << endl; return 0; }
|
|
« 1 » |