Ile kolejnych liczb wygenerować?    

Algorytm rekurencyjny kodowany w Perlu

Courtesy of Wikipedia Generuj $n liczb Fibonacciego:
####################################
for ($i=1; $i<=$n; $i++)
{
     $fibonacci = fib($i);
     print "$fibonacci\n";
}
######################
# DEFINICJA FUNKCJI
sub fib
{
     # Pobiera argument funkcji ($i)
     my $i = shift;

     # Tak zwana baza algorytmu rekurencyjnego (dla $i=1 lub $i=2)
     if ($i < 3)
     {
          my $fibonacci = $i-1;
          return $fibonacci;
     }
     else
     {
          # Funkcja fib wywołuje rekurencyjnie samą siebie!!!
          my $fibonacci = (fib($i-1) + fib($i-2));
          return $fibonacci;
     }
}
####################################

Algorytm rekurencyjny (N.B. powyższy kod można z całą pewnością zoptymalizować) powinien teoretycznie wygenerować ciąg 1477 liczb Fibonacciego (wliczając w to liczbę zero). Niestety, w praktyce taka operacja trwałaby niezwykle długo, ponieważ algorytm rekurencyjny ma tendencję do znacznego pochłaniania zasobów procesora w porównaniu z metodą iteracyjną lub arytmetyczną.

Dla przykładu, wygenerowanie zaledwie 35 liczb Fibonacciego przy zastosowaniu przedstawionego powyżej algorytmu rekurencyjnego (maszyna wirtualna Windows 10 x64, Intel Core i7-6700 CPU dual-core, 8 GB RAM) zajmuje aż 30 sekund! Oczywiście mój serwer WWW pracujący w systemie Linux na znacznie mocniejszej architekturze sprzętowej radzi sobie z tym zadaniem nieco szybciej. Niniejszym zachęcam do testów w okienku powyżej!

Ze względu na zupełnie inną strukturę kodu algorytm iteracyjny wykona tę samą operację w ułamku sekundy!!! cool