• Nie Znaleziono Wyników

W podstawie programowej przedmiotu informatyka na poziomie rozszerzonym dla szkoły ponadpodstawowej znajdują się zapisy dotyczące rekurencji i konstrukcji rekurencyjnych:

5.9. stosuje rekurencję w prostych sytuacjach problemowych;

5.11.f. algorytmy badające własności geometryczne, np.:

- konstrukcje rekurencyjne: drzewo binarne, dywan Sierpińskiego, płatek Kocha;

Od kilku lat w arkuszach maturalnych pojawiają się zagadnienia związane z tą tematyką. Jak wprowadzić uczniów w świat rekurencji? Można wykorzystać do tego celu m.in. grafikę rekurencyjną i moduł turtle języka Python.

Rysunek 1. Fraktal, źródło pixabay.com

Klasyczne konstrukcje

Zagadnienia związane z grafiką rekurencyjną warto zacząć od najprostszych przykładów: krzywej i płatka Kocha, drzewa binarnego oraz trójkąta Sierpińskiego. Wszystkie te konstrukcje można omówić i zaimplementować w ramach jednej jednostki lekcyjnej. W przypadku omawiania krzywej Kocha warto skorzystać z zasobów Wikipedii1. W opisie czytamy:

Krzywa Kocha powstaje z odcinka, poprzez podzielenie go na 3 części i zastąpienie środkowej ząbkiem (o ramieniu długości równej 1/3 odcinka) takim, że wraz z usuwaną częścią tworzy trójkąt równoboczny. Krok ten jest powtarzany w nieskończoność, dla każdego fragmentu odcinka.

1 https://pl.wikipedia.org/wiki/Krzywa_Kocha

Cyfrowa edukacja Nauczanie informatyki

Rysunek 2. Etapy tworzenia krzywej Kocha, źródło pl.wikipedia.org

Na podstawie analizy poszczególnych kroków jesteśmy w stanie w pseudokodzie przedstawić proces powstawania krzywej Kocha o dowolnym stopniu złożoności.

Koch(n, dl) jeżeli n = 0

narysuj linię długości dl zakończ działanie

Koch(n – 1, dl / 3) obróć się w lewo o 60 Koch(n – 1, dl / 3) obróć się w prawo o 120 Koch(n – 1, dl / 3) obróć się w lewo o 60 Koch(n – 1, dl / 3) A stąd już krok do zapisu w języku Python.

Przy okazji rysowania krzywej Kocha warto zastanowić się, z ilu odcinków się ona składa.

stopień złożoności liczba odcinków

0 1

1 4

2 16

n 4n

45

Cyfrowa edukacja

45

Nauczanie informatyki

45

Nauczanie informatyki

Liczba odcinków ma wpływ na czas tworzenia grafiki. Dlatego wraz ze wzrostem stopnia złożoności rośnie czas generowania grafiki. Ponieważ wzrost ten jest wykładniczy, jesteśmy w stanie wywoływać funkcję tylko dla małych wartości n.

Generowanie płatka Kocha sprowadza się do rysowania trójkąta równobocznego, którego boki są krzywą Kocha.

Ciekawie prezentuje się rysunek w przypadku zmiany kierunku obrotu z prawego na lewy. W tym przypadku krzywa rysowana jest wewnątrz trójkąta.

Rysunek 3. Efekty wywołania funkcji Platek z różnymi kierunkami obrotów (prawo/lewo).

Czerwoną linią zaznaczone są boki trójkąta Z płatków Kocha można konstruować ciekawe układy (rysunek 4).

Rysunek 4. Parkietaż z płatków Kocha2 2 https://en.wikipedia.org/wiki/Koch_snowflake#/media/File:Koch_similarity_tiling.svg

46

Cyfrowa edukacja

46

Nauczanie informatyki

46

Nauczanie informatyki

Kolejna konstrukcja to drzewo binarne. Drzewo składa się z pnia i dwóch poddrzew o stopniu złożoności o jeden mniejszym, przy czym drzewo o stopniu złożoności 0 to sam pień.

drzewo(0, 100) drzewo(1, 100) drzewo(2, 100) drzewo(4, 100)

Rysunek 5. Drzewa binarne o różnym stopniu złożoności

W języku Python rysowanie drzewa podzielimy na dwa etapy. Pierwszy etap to utworzenie drzewa.

Standardowo żółw skierowany jest na prawo, z tego względu rysowane drzewo jest obrócone o kąt 90 stopni w tym kierunku i sprawia wrażenie przewróconego. Dlatego w drugim etapie dodany został obrót o kąt 90 stopni w lewo w celu zorientowania drzewa w pionie.

Ostatnią konstrukcją opisywaną w tej części artykułu będzie trójkąt Sierpińskiego. Zaczniemy od trójkąta równobocznego, który jest podstawowym elementem tej figury.

Sam fraktal o złożoności n powstaje z trzech elementów o stopniu złożoności n - 1. Kolejne figury są połowę mniejsze oraz odpowiednio zorientowane na płaszczyźnie – w narożnikach trójkąta równobocznego.

47

Cyfrowa edukacja

47

Nauczanie informatyki

47

Nauczanie informatyki

Rysunek 6. Kolorowe trójkąty Sierpińskiego

Nie tylko wywołania rekurencyjne

W pierwszej części artykułu fraktale rysowane były rekurencyjnie, ale to nie jedyna możliwość. Trójkąt Sierpińskiego powstaje także podczas gry w chaos3. Jest również efektem barwienia liczb nieparzystych w trój-kącie Pascala, który został otrzymany w sposób iteracyjny.

Rysunek 7. Trójkąt Pascala z wybarwionymi nieparzystymi liczbami4

Iteracyjnemu generowaniu fraktali poświęcone było zadanie maturalne w 2009 roku (Iteracje).

Poniższe dwa układy równań liniowych, zastosowane wielokrotnie do przekształcania współrzędnych punktu (x, y) (przynajmniej kilka tysięcy razy) na przemian, w losowej kolejności, generują ciekawy obraz, znany jako smok Heighwaya. Zmienne x′ i y′ oznaczają nowe wartości współrzędnych x i y.

Do wygenerowania obrazu smoka Heighwaya może posłużyć następujący algorytm:

1. Przyjmij dowolne wartości początkowe x i y.

2. Powtórz wielokrotnie (przynajmniej kilka tysięcy razy):

2.1. Oblicz nowe wartości x i y:

• wybierz losowo z jednakowym prawdopodobieństwem jeden z dwóch podanych układów równań,

• oblicz x′ i y′ , stosując wybrany układ równań.

2.2. Zaznacz na wykresie kolejny punkt (x, y).

3 https://pl.wikipedia.org/wiki/Gra_w_chaos

4 https://en.wikipedia.org/wiki/Sierpi%C5%84ski_triangle#/media/File:Sierpinski_Pascal_triangle.svg

48

Cyfrowa edukacja

48

Nauczanie informatyki

48

Nauczanie informatyki

Algorytm ten można zaimplementować w arkuszu kalkulacyjnym lub w języku Python. W arkuszu kalkulacyjnym bazujemy na następujących formułach:

Na podstawie wygenerowanych współrzędnych 5000 punktów, po odrzuceniu pierwszych 100 wartości, tworzony jest wykres punktowy XY – obraz smoka Heighwaya.

Podobny efekt można uzyskać w języku Python.

Rysunek 8. Smok Heighwaya wygenerowany w arkuszu kalkulacyjnym (po lewej) i programistycznie (po prawej)

Rysunek 9. Rekurencyjna krzywa smocza i kolorowy parkietaż

49

Cyfrowa edukacja

49

Nauczanie informatyki

49

Nauczanie informatyki

Poniżej znajduje się rekurencyjna wersja powstawania krzywej smoczej:

Zainteresowanych czytelników odsyłam do artykułu Fraktalny świat papierowej tasiemki w czasopiśmie Delta5. Graficzna prezentacja funkcji rekurencyjnych

Ciekawym sposobem na urozmaicenie analizy wybranych funkcji rekurencyjnych może być dołożenie elemen-tów graficznych. Takim przykładem jest zadanie 2 z matury z czerwca 2020 roku.

Argumentami procedury sym(a, b) są dwie nieujemne liczby całkowite a i b. Wywołanie tej procedury spowoduje wypisanie pewnego ciągu liczb całkowitych.

sym(a,b) jeżeli a ≠ 0

sym(a – 1, b + 1) wypisz a * b sym(a – 1, b + 1)

Zamiast wypisywać wartość a * b, można rysować prostokąty o wysokości odpowiadającej tej wielkości.

5 http://www.deltami.edu.pl/temat/matematyka/geometria/2011/06/28/Fraktalny_swiat_papierowej_tasie/

50

Cyfrowa edukacja

50

Nauczanie informatyki

50

Nauczanie informatyki

Rysunek 10. Graficzna interpretacja funkcji rekurencyjnej sym(4, 2)

Poszczególne prostokąty mają odpowiednio wysokości: 5 8 5 9 5 8 5 8 5 8 5 9 5 8 5, co odpowiada przechodzeniu po poniższym drzewie w porządku in-order6:

Podsumowanie

Grafika rekurencyjna stanowi ważną część edukacji informatycznej. Język Python daje możliwość wizualiza-cji algorytmów geometrycznych oraz pełniejszego zrozumienia zagadnień związanych z rekurencją. Uczniowie chętnie sięgają po to narzędzie podczas omawiania zagadnień rekurencyjnych. Widzą plusy i minusy rozwiązań rekurencyjnych – szczególnie w momencie prób testowania funkcji tworzących grafikę rekurencyjną. Dla kilku pierwszych stopni złożoności rysunki pojawiają się stosunkowo szybko. Niestety nawet niewielki wzrost stopnia złożoności skutkuje wykładniczym wzrostem czasu. Szybko zdają sobie sprawę z rozmiarów drzewa wywołań lub liczby odcinków do narysowania. Jest to kolejna zachęta do wykorzystania języka programowania Python w pracy z uczniami.

Rysunek 11. Przykładowy fraktal, źródło pixabay.com

6 https://pl.wikipedia.org/wiki/Przechodzenie_drzewa

51

Cyfrowa edukacja

51

Nauczanie informatyki

51

Nauczanie informatyki

Maturalne zadanie bazodanowe