Co na tym etapie trzeba pamietać o tych dwóch elementach:
A teraz trochę na wesoło o rekurecji i iteracji, może lepiej zapamietacie:
A tu jest wierszyk który obrazuje zasadę rekurencji:
Wpadł pies do kuchni i porwał mięsa ćwierć
A jeden kucharz głupi, zarąbał go na śmierć
A drugi kucharz mądry, co serce i litość miał
Postawił mu nagrobek i taki napis dał:
Wpadł pies do kuchni i porwał mięsa ćwierć
A jeden kucharz głupi, zarąbał go na śmierć
A drugi kucharz mądry, co serce i litość miał
Postawił mu nagrobek i taki napis dał:
Itd.
Ten natomiast jest wierszem iteracyjnym:
Na zielonej łączce 1, 2, 3
Pasły się zajączki 1, 2, 3
A to była pierwsza zwrotka
teraz będzie druga zwrotka.
Na zielonej łączce 1, 2, 3
Pasły się zajączki 1, 2, 3
A to była druga zwrotka
teraz będzie trzecia zwrotka:
Na zielonej łączce 1, 2, 3
Pasły się zajączki 1, 2, 3
A to była trzecia zwrotka
teraz będzie czwarta zwrotka:
Na zielonej ...
Przykłady rekurencji i iteracji w Logo:
1. http://it.pwsz-ns.edu.pl/~jwojcik/prog/Logo2.pdf,
2. https://logo.oeiizk.waw.pl/index.php?sr=materialy
Inne zastosowania w Logo:
Nieskomplikowane działania można opisać w postaci skończonego ciągu prostych poleceń. Na przykład treść procedury rysowania kwadratu może być ciągiem poleceń pierwotnych.
OTO KWADRAT :BOK
NAPRZÓD :BOK PRAWO 90
NAPRZÓD :BOK PRAWO 90
NAPRZÓD :BOK PRAWO 90
NAPRZÓD :BOK PRAWO 90
JUŻ
Możemy to samo (jak rysować kwadrat) zdefiniować krócej, jeśli użyjemy w definicji polecenia pierwotnego Logo POWTÓRZ
OTO KWADRAT :BOK
POWTÓRZ 4 [NP :BOK PW 90]
JUŻ
POWTÓRZ - jest poleceniem pierwotnym, które musi mieć dwie dane: liczbę powtórzeń i listę poleceń. Jego skutkiem jest wykonanie daną liczbę razy danej listy poleceń – w naszym przykładzie wykonanie 4 razy listy dwóch poleceń [NP :BOK 90].
Zauważ, że: NAPRZÓD :BOK PRAWO 90 to dwa polecenia napisane w jednym wierszu, jak w pierwszym przykładzie definicji polecenia KWADRAT, natomiast [NP :BOK PW 90] to lista dwóch poleceń.
Druga definicja jest istotnie krótsza, jej treść składa się tylko z jednego wiersza, ale rysowanie kwadratu polega zawsze na wykonaniu w tej samej kolejności 8 elementarnych kroków - ruchów naprzód i obrotów pod kątem prostym w prawo.
Zupełnie inna jest sytuacja w przypadku rysowania łamanej regularnej dla danych:
Żółw rysuje takie łamane dokładnie tak samo jak kwadrat. Idzie naprzód o daną kroków i obraca się w prawo o ustalony kąt. Ale liczba powtórzeń tych dwóch elementarnych kroków nie jest z góry ustalona. Jest parametrem procedury:
OTO ŁAMANA.REGULARNA :N :KĄT :BOK
POWTÓRZ :N [NP :BOK PW :KĄT]
JUŻ
Dzięki zastosowaniu polecenia pierwotnego POWTÓRZ, można pewne definicje istotnie skrócić i co ważniejsze można zdefiniować działania o nieustalonej z góry raz na zawsze liczbie kroków elementarnych.
Działania powtarzalne można też definiować w inny sposób:
OTO LICZ :OD :DO
JEŚLI :OD > :DO [STOP]
PISZ :OD
LICZ :OD + 1 :DO
JUŻ
LICZ - jest procedurą liczenia w ustalonym zakresie :OD :DO, tzn. wymieniania w naturalnym (rosnącym) porządku kolejnych liczb naturalnych nie mniejszych niż :OD i nie większych niż :DO.
Wywołaj LICZ z danymi dwoma liczbami naturalnymi np. LICZ 3 7
Logo powinno wypisać w kolejnych wierszach na ekranie tekstowym liczby:
3
4
5
6
7
Liczenie od 7 do 3 nie daje widocznego skutku, kończy się niczym bo nie można liczyć w natutalnym porządku od 7 do 3 (tylko odwrotnie).
Jak widać w definicjach w języku programowania musimy przywiązywać większe znaczenie do ścisłego znaczenia poleceń niż w języku potocznym, kiedy możemy liczyć w większym stopniu na domyślność rozmówcy.
W definicji procedury LICZ jest kilka nowych elementów. Omówimy je po kolei.
JEŚLI :OD > :DO [STOP] jest przykładem zastosowania pierwotnego polecenia warunkowego JEŚLI. W najprostszych przypadkach ma ono następującą postać:
JEŚLI wyrażenie_logiczne lista_poleceń
Jego wykonanie polega na sprawdzeniu, czy dane wyrażenie_logiczne jest spełnione (PRAWDA) i jeśli tak, wykonaniu danej listy_poleceń, a jeśli nie - zignorowaniu jej.
W naszym przypadku, jeśli dolne ograniczenie zakresu liczenia :OD ma wartość większą niż :DO, to wykonuje się polecenie STOP - koniec obliczeń. A jeśli :OD ma wartość nie większą niż :DO, to ignorujemy STOP, wyliczamy (piszemy) wartość :OD i liczymy dalej od wartości :OD + 1 do wartości :DO.
STOP - jest poleceniem sterującym - zakończ wykonywanie procedury. Najczęściej występuje w poleceniach warunkowych, jak w powyższym przykładzie, gdy chcemy zakończyć obliczanie w określonych przypadkach.
W treści procedury LICZ (w drugim wierszu) występuje jej wywołanie. Takie procedury, w których treści występuje ich wywołanie, nazywamy procedurami rekurencyjnymi. Ogólniej, rekurencyjnymi nazywamy takie procesy i struktury, które są podobne do swych części. Liczenie polega na wypisaniu pierwszej liczby i liczeniu dalej. Częścią procesu liczenia od 1 do 100 jest liczenie od 2 do 100.
Liczenie od 1 do N (a także w dowolnym zakresie :OD :DO) można również zdefiniować za pomocą polecenia POWTÓRZ.
OTO LICZ.DO :N
POWTÓRZ :N [PISZ NPW]
JUŻ
W tej definicji wywołujemy funkcję pierwotną NPW (pełna nazwa - NUMPOW). Jest to funkcja bez parametrów, która może wystąpić na liście poleceń instrukcji POWTÓRZ. Jej wynikiem jest numer kolejnego powtórzenia danej listy instrukcji.
Tak więc wykonanie POWTÓRZ 7 [PISZ NPW] polega na pięciokrotnym wykonaniu polecenia PISZ NPW. Za każdym razem NPW ma inną wartość: 1, 2, 3, 4, 5, 6, 7.
Na koniec omówimy jeszcze jeden prosty przykład zastosowania instrukcji warunkowej JEŚLI.
OTO MAKS :A :B
JEŚLI :A > :B [WY :A] [WY :B]
JUŻ
Jest to definicja MAKS, której wynikiem jest większa z dwóch danych wartości. W tym przykładzie użyliśmy polecenia JEŚLI w pełnej postaci:
JEŚLI wyrażenie_logiczne lista_poleceń_1 lista_poleceń_2
W takim przypadku wykonanie polecenia polega na sprawdzeniu, jaką wartość ma wyrażenie_logiczne i jeśli to PRAWDA, wykonaniu listy_poleceń_1, a w przeciwnym przypadku listy_poleceń_2.
WY - (WYNIK) to również polecenie sterujące języka Logo, które podobnie jak STOP, powoduje zakończenie obliczeń, ale dodatkowo wskazuje ich wynik.
Jeśli chcesz aby Logo zapisał większą z liczb w obszarze tekstowym zmień polecenie na:
OTO MAKS :A :B
JEŚLI :A > :B [PISZ :A] [PISZ :B]
JUŻ
Polecenia sterujące i warunkowe umożliwiają sterowanie przebiegiem obliczeń zależnie od określonych warunków. Dzięki temu, obliczanie według tej samej procedury może być raz krótsze, a raz dłuższe, zależnie od danych.