ALG8
Rozdział 6. Derekursywacja
Dużą wadą nowej techniki będzie niemożność łatwego jej sformalizowania. Z praktycznego punktu widzenia sprawa polega na tym, iż nie jest możliwe podanie prostego przepisu, który mógłby być w miarę automatycznie8 zastosowany. Będziemy musieli zatrudnić naszą wyobraźnię i intuicję-a czasami nawet pogodzić się z niemożnością znalezienia rozwiązania. Przejdźmy jednak do szczegółów.
Przypomnijmy raz jeszcze ogólną postać procedury rekurencyjnej:
void PI(param_wywoi)
I
param_wywcl-F(param_wywol)i PI (parair. wywol);
Wiemy, że wywołanie Pfparam wywal) modyfikuje (lub może zmodyfikować) zmloc i param \rywoL Poprzednio, aby się od tego uchronić, wykorzystaliśmy zachowawcze własności stosu.
Pomysł polega na tym, aby uzupełnić procedurę PI o pewne instrukcje, które wiedząc, jak wywołanie PI (param wywal) modyfikuje zmloc i param wywol wykonałyby czynność odwrotną, tak aby przywrócić ich wartości sprzed wywołania! Inaczej mówiąc, chodzi nam o doprowadzenie programu cło postaci:
void ?2 ()
(
(1)
paran\_wywol-F(param_wywol) ;
P2;
FUNKCJA_ODWROTNA(zm_loc,pa ram_wywol};
(2)
)
Działanie owej tajemniczej funkcji odwrotnej musi być takie, aby wartości zm tac i param wywol były dokładnie takie same w punktach programu oznaczonych (I) i (2). Jak to zrobić? Ba! oto jest dopiero pytanie! Odpowiedź na nic będzie inna w przypadku każdego programu i nie pozostaje nam nic innego, jak tylko pokazać jakiś konkretny przykład.
Poniższa procedura PI liczy elementy wymyślonego ad hac ciągu matematycznego:
odwrotna.cpp
void Pltint a, ints fc)
t
if(a==0!
Co nie znaczy, że bezmyślnie!
Wyszukiwarka
Podobne podstrony:
ALG8 168 Rozdział 6. Derekursywacjł Jak odróżnić powrót z procedury P, który powoduje definitywne jET8 178 Rozdział 10. Polityka turystyczna • dotychczasowy rozwój gospodarczy i tuALG8 18 Rozdziali. Zanim wystartujemy dopóki a>0 wykonuj; podstaw za c resztę z dzielenia a przeALG8 48 Rozdział 2. Rekurencja W celu dokładniejszego przeanalizowania algorytmu posłużymy się kilkALG8 68 Rozdział 3. Analiza sprawności algorytmów3.6. Nowe zadanie: uprościć obliczenia! Nic sposóbALG8 78___Rozdział 3 Analiza sprawności algorytmówZad. 3-4 Proszę rozwiązać następujące równanieALG8 88 Rozdział 4. Algorytmy sortowania Jest chyba dość oczywiste, że wywołania rekurencyjne zatrzALG 8 98 Rozdział 5. Struktury danych W następnych paragrafach zostaną przedstawione wszystkie metodALG8 108__Rozdział 5. Struktury danych5.1.3.Listy jednokierunkowe - teoria i rzeczywistość Oprócz pALG8 118 Rozdział 5. Struktury danych if(pŁzed==NULL) // wstawiamy na początek listy ( inf_ptr[nr].ALG8 128 Rozdział 5. Struktury dam i W zależności od konkretnych potrzeb można element /> fizyczALG8 138 Rozdział 5. Struktury danych • „prawy” potomek /-tego węzła jest „schowany” pod indeksem 2ALG8 148 Rozdział 5. Struktury danych 148 Rozdział 5. Struktury danych „ nadchodzące" elementyALG8 158 Rozdział 5. Struktury{ if (p->t[rio_indeksu{słowo[i])]==NULL) test=0; // bidk odgałęzieALG6 166 Rozdział 6. Derekursywacji kosztuje cenny czas procesora, który dodaje się do ogólnego czaALG2 172 Rozdział 6. Derekursywacja Wzmiankowany powyżej „tajemniczy sposób” nie powinien stanowićALG4 174 Rozdział 6. Derekursywatp 6.4. to dlaczego nie wspomnieliśmy o tym wcześniej, wprowadzającALG2 182 Rozdział 6. Derekursywatji 6, Jest to forma niewątpliwie równoważna, choALG6 186 Rozdział 6. Derekursywacja D(x); while((N!=i)44(N%2>) ) l N-N/2; C (x)więcej podobnych podstron