ALG2

ALG2



32 Rozdział 2. Rekurencja

Wyżej podaliśmy warunki pozytywnego zakończenie programu. W przypadku, gdy przebadaliśmy całą tablicę i element x nie został znaleziony, należy oczywiście zakończyć program w jakiś umówiony sposób - np. komunikatem o niepowodzeniu.

Proszę spojrzeć na przykładową realizację, jedną z kilku możliwych;

rekl.cpp

const    n=10;

int    tab[nl-łl,2,3,2,-7,44,5,1,0,-3);

void 3zukajfint tab|n],int left,int right,int x)

//left, riqht=lewa i prawa granica obszaru poszukiwań // tab    -    tablica

// x    =    wartość    do    odnalezienia

t

if (left>right)

cout << "Element " << x « " nie został odnaleziony\n"; else

if (tab[left]==x)

cout <<"Znalazłem szukany element "<< x «endl;

else

szukaj(tab,left+1,right,x);

)

Warunkiem zakończenia programu jest albo znalezienie szukanego elementu x, albo też wyjście poza obszar poszukiwań. Mimo swojej prostoty program powyższy dobrze ilustruje podstawowe, wspomniane już wcześniej cechy typowego programu rekurencyjnego. Przypatrzmy się zresztą uważniej:

•    Zakończenie programu jest jasno określone:

—    element znaleziony;

—    przekroczenie zakresu tablicy.

•    Duży problem zostaje „rozbity” na problemy elementarne, które umiemy rozwiązać (patrz wyżej), i na analogiczny problem, tylko o mniejszym stopniu skomplikowania:

—    z tablicy o rozmiarze n „schodzimy” do tablicy o rozmiarze n-/.

Podstawowymi błędami popełnianymi przy konstruowaniu programów rekuren-cyjnych są:

•    zle określenie warunku zakończenia programu;

•    niewłaściwa (nieefektywna) dekompozycja problemu.

W dalszej części rozdziału postaramy się wspólnie dojść do pewnych „zasad bezpieczeństwa” niezbędnych przy pisaniu programów rekurencyjnych. Zanim to jednak nastąpi, konieczne będzie dokładne wyjaśnienie schematu ich wykonywania.


Wyszukiwarka

Podobne podstrony:
ALG2 42 Rozdział 2. Rekurencja 2. m.in. wartości zmiennych tego poziomu (tzw. kontekst). Co więcej,
ALG2 52 Rozdział 2. RekurenZad. 2-4Oto jedno z możliwych rozwiązań: trójkąty ,cpp double y) void nu
ET2 32 Rozdział 3. Funkcje turystyki KONSEKWENCJE ROZWOJU TURYSTYKI Płaszczyzna gospodarcza Zasięg
ALG2 22 Rozdział 1. Zanim wystartujemy programowania nic znikły bynajmniej z horyzontu: Dijkstra, H
ALG0 30 Rozdział 2. Rekurencja 2.2 potwornie skomplikowany: klocków jest cala masa i niespecjalnie
ALG6 36 Rozdział 2. Rekurencja każemy. W rozdziale 9 zostanie omówiona ciekawa technika programowan
Alg4 44 Rozdział2. Rekurencja ( if (lg>0) ( lineto(x+lg,y); lineto(x+lg,y+lg); lineto
ALG6 46_ _ Rozdział2. Rekurencja rekurencyjnych jest pamięcioźerność: wielokrotne wywołania rekuren
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ł 3. Analiza sprawności algorytmów Rys. 3 -
ALG2 72 Rozdział 3. Analiza sprawności algorytmówn o) = i, i = A + O, A =    1. Po t
ALG2 102___Rozdział 5. Struktury danych I ELEMENT *q=inf.głowa; if (pusta()) cout << "(l
ALG2 112 Rozdział 5. Struktury danych 112 Rozdział 5. Struktury danych //rekord informacyjny listy
ALG2 122 Rozdział 5. Struktury danych Czerniak zarabia 3000zl Wynik usunięcia rekordu pracownika za
ALG2 132 Rozdział 5. Struktury da //"w" zostanie "załadowane" wartością zdjętą
ALG2 142 Rozdział 5. Struktury danych a ż do momentu znalezienia właściwego dlań miejsca. Popatrzmy
ALG2 152 Rozdział 5. Struktury danytl 5.; raturn oblicz(w->lcwy)+oblicz(w->prawy); case - :

więcej podobnych podstron