Tutorial
Tik tak tik tak tik tak... chrrrr zzzzz
Powsta³ w g³owie nowy algorytm. W my¶l niego mo¿na napisaæ ten program przy pomocy rekurencji, bo przecie¿ liczby Fibonacciego s± zdefiniowane rekurencyjnie.
var d,n,i : longint; function fib(x: longint): longint; begin if x=0 then fib:=0; if x=1 then fib:=1; fib:=(fib(x-1)+fib(x-2)) mod 10000 end; begin readln(d); while (d>0) do begin d:=d-1; readln(n); writeln(fib(n)); end; end.
Wys³anie takiego programu spowoduje, ¿e Sprawdzarka zwróci ocenê:
Time Limit Exceeded
Oznacza to, ¿e w program dzia³a³ za d³ugo. W tym przypadku liczby Fibonacciego licz± siê zbyt wiele razy i to powoduje, ¿e komputer wykonuje mnóstwo niepotrzebnych operacji. Np. dla N = 4 wyliczymy fib(4) => (fib(3) i fib(2)), potem fib(3) => (fib(2) i fib(1)) i fib(2) => (fib(1) i fib(0)), a potem jeszcze raz fib(2) => (fib(1) i fib(0)). Jak widaæ te same warto¶ci licz± siê kilka razy. Dla du¿ych liczb powtarzaj±cych siê operacji bêdzie bardzo du¿o i program bêdzie dzia³a³ d³ugo. Mówi±c fachowo, algorytm taki ma z³o¿ono¶æ rzêdu O(2N). Oznacza to, ¿e algorytm jest wyk³adniczy i bêdzie dzia³a³ zbyt d³ugo.
Uwaga! Program uruchomiony na Sprawdzarce testowany jest na innych danych, ni¿ te z tre¶ci zadania. Je¶li w tre¶ci s± przyk³ady o ma³ych warto¶ciach zmiennych (np. N = 2), nie oznacza to wcale, ¿e takie same bêd± na Sprawdzarce. Wrêcz przeciwnie, ka¿dy program jest testowany na danych du¿ych (np. N = 20000), a tak¿e z³o¶liwych przypadkach szczególnych (np. N = 0).