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