Studium Podyplomowe informatyki, Programowanie – materiały
Transkrypt
Studium Podyplomowe informatyki, Programowanie – materiały
Studium Podyplomowe informatyki, Programowanie – materiały pomocnicze przygotowała Helena Krupicka Rekurencja – przykłady i działanie procedur rekurencyjnych Procedura rekurencyjna, to taka procedura, która wywołuje sam siebie. Przykładem procedury z niesko czon rekurencj jest procedura ruch. oto starter oto ruch ruch NP 10 PW JLD CZEKAJ 100 Uwaga: Zatrzymasz działanie takiej procedury, ju ruch je li naci niesz 3-ci od ko ca przycisk z podpisem: ju „Zastopuj proces uruchomiony z wiersza polece ” Innym przykładem procedury rekurencyjnej, która nie ko czy swojego działania, jest spirala. OTO spiralaN :a NP :a PW 90 spiralaN :a + 1 JU Rekurencja z warunkiem zako czenia Przykład algorytmu rekurencyjnego z warunkiem zako czenia podał Jerszow. Algorytm nazywa si "Jedz kaszk ". Algorytm Jedz kaszk 1. Je li talerz jest pusty, to koniec. 2. Zjedz ły k kaszki. 3. Jedz kaszk . Procedura rekurencyjna OTO spiralaK :a JE LI :a > 300 [STOP] NP :a PW 90 spiralaK :a + 1 JU Schemat prostej rekurencji z warunkiem zako czenia 1. Warunek zako czenia rekurencji 2. Instrukcje wykonywane bez rekurencji 3. Wywołanie rekurencyjne. Mog wyst powa te inne schematy Wywołanie (i wykonanie) procedury: CS spiralaK 1 Rysowanie spirali mo na uogólni parametryzuj c k t obrotu (zamiast 90). Otrzymuje si wówczas procedur : OTO spirala :bok :k t Je li :bok > 300 [STOP] NP :bok PW :k t spirala :bok + 1 :k t JU Przykłady wywołania tej procedury: CS spirala 1 121, CS spirala 1 (-153) Działanie procedur rekurencyjnych na przykładach procedur licz i licz1 Wywołanie: licz 3 JE LI 3 = 0 […] PS 3 licz 2 JE LI 2 = 0 […] PS 2 licz 1 JE LI 1 = 0 […] PS 1 licz 0 JE LI 0 = 0 [STOP] OTO licz :n JE LI :n = 0 [STOP] PS :n licz :n – 1 JU Procedura z rekurencyjna z rekurencj ko cow . Mo e by automatycznie zamieniana na iteracj JE LI :n=0 [STOP] licz1 :n – 1 PS :n JU JE LI 3 = 0 […] licz1 2 JE LI 2 = 0 […] licz1 1 JE LI 1 = 0 […] licz1 0 JE LI 0 = 0 [STOP] Procedura bez rekurencji ko cowej OTO licz1 :n Wywołanie: licz1 3 PS 1 JU JU PS 2 JU JU Wyniki Wyniki licz 3: 3 2 1 JU Wyniki licz1 3: 1 2 3 Po doj ciu rekurencji na najgł bszy poziom, przy wycofywaniu si z rekurencji nie s wykonywane adne instrukcje (oprócz JU ). PS 3 JU Tu instrukcje (PS) s wykonywane przy wycofywaniu si z rekurencji. 1 Studium Podyplomowe informatyki, Programowanie – materiały pomocnicze przygotowała Helena Krupicka Inny sposób ilustrowania działania procedury rekurencyjnej licz 3 Procedura: JE LI 3 = 0 [STOP] JE LI 2 = 0 [STOP] OTO licz :n PS 3 PS 2 JE LI :n = 0 licz 2 licz 1 [STOP] PS :n JU JU licz :n – 1 JU JE LI 1 = 0 [STOP] PS 1 licz 0 JU JE LI 0 = 0 [STOP] Licz1 3 JE LI 3 = 0 [STOP] licz1 2 Procedura: OTO licz1 :n JE LI :n = 0 [STOP] licz1 :n – 1 PS :n JU PS 3 JU JE LI 2 = 0 [STOP] licz1 1 JE LI 1 = 0 [STOP] licz1 0 PS 2 JU PS 1 JU JE LI 0 = 0 [STOP] Rysunki rekurencyjne bez niezmiennika i z niezmiennikiem Zadanie: Narysuj piramid zło on z prostok tów korzystaj c z algorytmu rekurencyjnego. Specyfikacja zadania: • Podstaw piramidy jest prostok t o bokach a i 5*a. • Parametrem algorytmu rekurencyjnego jest długo krótszego boku podstawy, czyli a. • Wymiary ka dego kolejnego prostok ta s 0.8 wymiarów ka dego poprzedniego prostok ta. • Algorytm ko czy działanie, gdy długo boku a rysowanego prostok ta jest mniejsza od 5. Procedura bez niezmiennika Procedura z niezmiennikiem OTO piramida_B :a je li :a < 5 [STOP] prostok t :a 5 * :a hop ( 0.1 * 5 * :a) :a czekaj 1000 piramida_B 0.8 * :a czekaj 1000 JU OTO piramida_N :a je li :a < 5 [STOP] prostok t :a 5 * :a hop ( 0.1 * 5 * :a) :a czekaj 1000 piramida_N 0.8 * :a czekaj 1000 hop ( - 0.1 * 5 * :a) (-:a) czekaj 1000 JU Piramida_B 40 Instrukcja czekaj spowalnia działanie procedury i umo liwia obserwowanie kolejnych etapów jej działania Ta instrukcja hop jest wykonywana na ka dym poziomie przy wycofywaniu si z rekurencji, dlatego ółw wraca z góry piramidy „po jednym schodku” a do punktu pocz tkowego. Piramida_N 40 2