ALG6

ALG6



46_ _ Rozdział2. Rekurencja


rekurencyjnych jest pamięcioźerność: wielokrotne wywołania rekurencyjne mogą łatwo zablokować całą dostępną pamięć! Problemem jest tu jednak nie fakt zajętości pamięci, ale typowa niemożność łatwego jej oszacowania przez konkretny algorytm rekurencyjny. Można do tego wykorzystać metody służące do analizy efektywności algorytmów (patrz rozdział 3), jednakże jest to dość nużące obliczeniowo, a czasami nawet po prostu niemożliwe.

W podrozdziale Typy programów rekurencyjnych poznaliśmy metodę na ominięcie kłopotów z pamięcią poprzez stosowanie rekurencji „z parametrem dodatkowym”. Nie wszystkie jednak problemy dadzą się rozwiązać w ten sposób, ponadto programy używające tej metody tracą odrobinę na czytelności. No cóż, nic ma róży bez kolców...

Kiedy nie należy używać rekurencji? Ostateczna decyzja należy zawsze do programisty, tym niemniej istnieją sytuacje, gdy ów dylemat jest dość łatwy do rozstrzygnięcia. Nie powinniśmy używać rozwiązań rekurencyjnych. gdy:

•    w miejsce algorytmu rekurencyjnego można podać czytelny i/lub szybki program iteracyjny;

•    algorytm rekurencyjny jest niestabilny (np. dla pewnych wartości parametrów wejściowych może się zapętlić lub dawać „dziwne” wyniki).

Ostatnią uwagę podaję już raczej, by dopełnić formalności. Otóż w literaturze można czasem napotkać rozważania na temat niekorzystnych cech tzw. re-kurencji skraśnej: podprogram A wywołuje podprogram B, który wywołuje z kolei podprogram A. Nie podałem celowo przykładu takiego „dziwoląga”, gdyż nadmiar złych przykładów może być szkodliwy. Praktyczny wniosek, który możemy wysnuć analizując „osobliwe” programy rekurencyjne, pełne nieprawdopodobnych konstrukcji, jest jeden: UNIKAJMY ICH, jeśli tylko nie jesteśmy całkowicie pewni poprawności programu, a intuicja nam podpowiada, że w danej procedurze jest coś nieobliczalnego.

Korzystając z katalogów algorytmów, formalizując programowanie etc. można bardzo łatwo zapomnieć, że wiele pięknych i eleganckich metod powstało samo z siebie - jako przebłysk geniuszu, intuicji, sztuki... A może i my moglibyśmy dołożyć nasze „co nieco” do tej kolekcji? Proponuję ocenić własne siły poprzez rozwiązywanie zadań, które odpowiedzą w sposób najbardziej obiektywny, czy rozumiemy rekurencję jako metodę programowania.


Wyszukiwarka

Podobne podstrony:
ALG6 36 Rozdział 2. Rekurencja każemy. W rozdziale 9 zostanie omówiona ciekawa technika programowan
ALG6 176 Rozdział6. Derekursywacja
ALG6 106 Rozdziała. Strukturydanjt 5.1 będzie ich fuzją. Rekurencyjny zapis tego procesu jest bardz
ALG0 30 Rozdział 2. Rekurencja 2.2 potwornie skomplikowany: klocków jest cala masa i niespecjalnie
ALG8 88 Rozdział 4. Algorytmy sortowania Jest chyba dość oczywiste, że wywołania rekurencyjne zatrz
ALG2 32 Rozdział 2. Rekurencja Wyżej podaliśmy warunki pozytywnego zakończenie programu. W przypadk
ALG2 42 Rozdział 2. Rekurencja 2. m.in. wartości zmiennych tego poziomu (tzw. kontekst). Co więcej,
Alg4 44 Rozdział2. Rekurencja ( if (lg>0) ( lineto(x+lg,y); lineto(x+lg,y+lg); lineto
ALG8 48 Rozdział 2. Rekurencja W celu dokładniejszego przeanalizowania algorytmu posłużymy się kilk
ALG0 50_ _Rozdział2. Rekurencja Odpowiadający temu rozumowaniu program przedstawia się
ALG2 52 Rozdział 2. RekurenZad. 2-4Oto jedno z możliwych rozwiązań: trójkąty ,cpp double y) void nu
ALG6 56 Rozdział 3. Analiza sprawności algorytmów jest intuicyjnie bardzo proste, dalej będziemy uż
ALG6 156 Rozdział 5. Struktury danya Proces przechadzania się po drzewie nie jest bynajmniej zakońc
ET6 46 Rozdział 4. Turystyka jako sektor gospodarki z otoczenia gospodarczego zbiór, który łączą
ALG6 26 RozdziaH. Zanim wystartujemy 1.5 metody niezmienników (zwanej niekiedy metodą Floyda). Mają
ALG6 66 Rozdział 3. Analiza sprawności algorytmów return pos; else    //element zost
ALG6 76 Rozdział 3. Analiza sprawności algorytmów Analogicznie dla 2 otrzymamy: Vn > 1, A(n,2) =

więcej podobnych podstron