ALG5

ALG5



Rozdział 6

Derekursywacja

Podjęcie tematu przekształcania algorytmów rekurencyjnych na ich postać itc-racyjną - oczywiście równoważną funkcjonalnie! — jest logiczną konsekwencją omawiania rekurencji. Pomimo iż temat ten był kiedyś podejmowany wyłącznie na użytek języków nie umożliwiających programowania rekurencyjnego (FORTRAN, COBOL), nawet obecnie znajomość tych zagadnień może mieć pewne znaczenie praktyczne.

Sam fakt poruszenia tematu derekursywacji w książce poświęconej algorytmom i technikom programowania jest trochę ryzy kowny - nie są to zagadnienia o charakterze czysto algorytmicznym. Tym niemniej w praktyce w'arto coś na temat wiedzieć, gdyż trudno derekursywacji odmówić znaczenia praktycznego. Skąd jednak wziął się sam pomysł takiego zabiegu? Programy wyrażone w formie rekurencyjnej są z natury rzeczy bardzo czytelne i raczej krótkie w zapisie. Nie trzeba być wybitnym specjalistą od programowania, aby się domyślić, iż wersje iteracyjne będą zarówno mniej czytelne, jak i po prostu dłuższe. Po cóż więc w ogóle podejmować się tego — zdawałoby się bezsensownego - zadania?

Rzeczywiście, postawienie sprawy w ten sposób jest zniechęcające. Poznawszy kilka istotnych zalet stosowania technik rekurencyjnych chcemy się teraz od tego całkowicie odwrócić plecami! Na szczęście nie jest aż tak źle, bowiem nikt tu nie ma zamiaru proponować rezygnacji z rekurencji. Nasze zadanie będzie wchodziło w zakres zwykłej optymalizacji kodu w celu usprawnienia jego wykonywania w rzeczywistym systemie operacyjnym, w prawdziwym komputerze.

Piętą Achillesową większości funkcji rekurencyjnych jest intensywne wykorzystywanie stosu, który- służy do odtwarzania „zamrożonych” egzemplarzy tej samej funkcji. Z każdym takim nieczynnym chwilowo egzemplarzem trzeba zachować pełny zestaw jego parametrów wywołania, zmiennych lokalnych czy w-reszcie adres powrotu. To tyle, jeśli chodzi o samą zajętość pamięci. Nie zapominajmy jednak, iż zarządzanie przez kompilator tym całym bałaganem


Wyszukiwarka

Podobne podstrony:
ALG 8 228 Rozdział 9. Zaawansowane techniki programowania • funkcja KOMB polega na najzwyklejszym po
ALG#6 236 Rozdział 9. Zaawansowane techniki programowania części plecaka przeznaczonej na sery y ’ w
Foto2979 204 Rozdział 2 instytucji zaniepokojonych rozwojem zdarzenia, mającym wpływ na ich instytuc
47895 Skan50 Rozdział IIITEMAT I PLAN PRACY DYPLOMOWEJ1. Wybór tematu Wybór i odpowiednie sformułow
ALG3 Rozdział 3Analiza sprawności algorytmów Podstawowe kryteria pozwalające na wybór właściwego al
ALG5 4.2. Sortowanie bąbelkowe, algorytm klasy 0(H2) 85 for (int j-n-l;j>i;j—) if (tab[j]<tab
ALG 3 Rozdział 5Struktury danych Nikogo nie trzeba chyba przekonywać o wadze tematu, który zostanie
ALG5 6.6. Klasyczne schematy derekursywacji 185 Sprawdźmy teraz, czy w istocie podane wyżej przeksz
ALG6 Rozdział 7. Algorytmy przeszukiwania r > dzielenie modulo RmM: H(v) = v% Rmax Przykład: Dla
ALG 0 200 Rozdział 7. Algorytmy przeszukiwania Rekordy E i F zostały zapamiętane w momencie stwierdz
ALG 2 202 Rozdział 7. Algorytmy przeszukiwani! gdzie a jest współczynnikiem zapełnienia tablicy T. A
ALG 4 204 Rozdział 7. Algorytmy przeszukiwania i (gdzie a jest, tak jak poprzednio, współczynnikiem
ALG 8 8.‘ 208 Rozdział 8. Przeszukiwanie tekstów Rys. H - 1. Algorytm typu
ALG!6 216 Rozdział 8. Przeszukiwanie tekslói8.2.2.Algorytm Boyera i Moore’a Kolejny algorytm, który
ALG$6 246 Rozdział 10. Elementy algorytmiki gratów Ta historyczna anegdota stanowi jednocześnie dosk
ALG$8 248 RozdziałłO. Elementy algorytmiki gratów10.2.Sposoby reprezentacji grafów Poznane uprzednio
ALG 0 250 RozdziaMO. Elementy algorytmiki gratów ( z-O; while(l) // pętla nieskończona I if(z==n)

więcej podobnych podstron