rekurze - masaryk universityxpelanek/ib111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno,...
TRANSCRIPT
![Page 1: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/1.jpg)
Rekurze
IB111 Zaklady programovanıRadek Pelanek
2018
1 / 72
![Page 2: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/2.jpg)
xkcd: Tabletop Roleplaying
https://xkcd.com/244/
2 / 72
![Page 3: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/3.jpg)
To iterate is human, to recurse divine. (L. Peter Deutsch)
3 / 72
![Page 4: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/4.jpg)
Rekurze
pouzitı funkce pri jejı vlastnı definici
volanı sebe sama (s jinymi parametry)
4 / 72
![Page 5: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/5.jpg)
Sebereference
https://xkcd.com/688/
5 / 72
![Page 6: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/6.jpg)
Sebereferencnı test
1 Ktere pısmeno nenı spravnou odpovedı na zadnou otazku:(A) A (B) C (C) B
2 Odpoved’ na 3. otazku je:(A) stejna jako na 1. otazku (B) stejna jako na 2.otazku (C) jina nez odpovedi na 1. a 2. otazku
3 Prvnı otazka, na kterou je odpoved’ A, je otazka:(A) 1 (B) 2 (C) 3
Hlavolamikon
6 / 72
![Page 7: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/7.jpg)
Pirati
5 piratu si delı poklad: 100 mincı
nejstarsı pirat navrhne rozdelenı, nasleduje hlasovanı
alespon polovina hlasu ⇒ rozdeleno, hotovo
jinak ⇒ navrhujıcı pirat zabit, pokracuje druhy nejstarsı(a tak dale) (rekurze!)
priority1 prezıt2 mıt co nejvıce mincı3 zabıt co nejvıc ostatnıch piratu
slozitejsı varianty: 6 piratu a 1 mince, 300 piratu a 100 mincı
7 / 72
![Page 8: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/8.jpg)
Rekurze a sebereference
Rekurze a sebereference – klıcove myslenky v informatice
nektere souvislosti:
matematicka indukce
funkcionalnı programovanı
rekurzivnı datove struktury (napr. stromy)
gramatiky
logika, neuplnost
nerozhodnutelnost, diagonalizace
8 / 72
![Page 9: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/9.jpg)
Rekurze a sebereference
... nejen v informatice
M. C. Escher; Drawing Hands, 1948
Godel, Escher, Bach: An Eternal Golden Braid; DouglasHofstadter
9 / 72
![Page 10: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/10.jpg)
Rekurze a uvodnı programovanı
uvedene aplikace rekurze a sebereference casto pomernenarocne
hodı se poradne pochopit rekurzi na urovnijednoduchych programu
bezprostrednı navaznost – Algoritmy a datove struktury
10 / 72
![Page 11: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/11.jpg)
Faktorial
n! = 1 · 2 · · · (n − 1) · n
f (n) =
{1 pokud n = 1
n · f (n − 1) pokud n > 1
11 / 72
![Page 12: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/12.jpg)
Faktorial iterativne (pomocı cyklu)
def fact(n):
f = 1
for i in range(1, n+1):
f = f * i
return f
12 / 72
![Page 13: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/13.jpg)
Faktorial rekurzivne
def fact(n):
if n == 1: return 1
else: return n * fact(n-1)
13 / 72
![Page 14: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/14.jpg)
Faktorial rekurzivne – ilustrace vypoctu
fact(4)
4 * fact(3)
3 * fact(2)
2 * fact(1)
11
2
6
24
14 / 72
![Page 15: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/15.jpg)
Prıklad: vypis cısel
Vymyslete funkci, ktera:
vypıse cısla od 1 do N
pomocı rekurze – bez pouzitı cyklu for, while
15 / 72
![Page 16: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/16.jpg)
Prıklad: vypis cısel
Vymyslete funkci, ktera:
vypıse cısla od 1 do N
pomocı rekurze – bez pouzitı cyklu for, while
def sequence(n):
if n > 1:
sequence(n-1)
print(n)
16 / 72
![Page 17: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/17.jpg)
Co udela tento program?
def test(n):
print(n)
if n > 1:
test(n-1)
print(-n)
test(5)
17 / 72
![Page 18: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/18.jpg)
Ilustrace zanorovanı
test(1)
test(2)
test(3)
3
2
1 -1
-2
-3
18 / 72
![Page 19: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/19.jpg)
Neprıma rekurze
def even(n):
print("even", n)
odd(n-1)
def odd(n):
print("odd", n)
if n > 1:
even(n-1)
even(10)
19 / 72
![Page 20: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/20.jpg)
Rekurzivnı stromecek
20 / 72
![Page 21: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/21.jpg)
Rekurzivnı stromecek
nakreslit stromecek znamena:
udelat stonek
nakreslit dva mensı stromecky (pootocene)
vratit se na puvodnı pozici
21 / 72
![Page 22: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/22.jpg)
Stromecek zelvı grafikou
def tree(length):
forward(length)
if length > 10:
left(45)
tree(0.6 * length)
right(90)
tree(0.6 * length)
left(45)
back(length)
22 / 72
![Page 23: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/23.jpg)
Podoby rekurze, odstranenı rekurze
koncova rekurze (tail recursion)
rekurzivnı volanı je poslednı prıkaz funkcelze vesmes prımocare nahradit cyklem
”plna“ rekurze
”zanorujıcı se“ volanı
napr. stromeceklze prepsat bez pouzitı rekurze za pouzitı zasobnıkurekurzivnı podoba casto vyrazne elegantnejsı
23 / 72
![Page 24: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/24.jpg)
Hanojske veze aneb O konci sveta
video:
https://www.fi.muni.cz/~xpelanek/IB111/hanojske_veze/
https://www.youtube.com/watch?v=8yaoED8jc8Y
klaster kdesi vysoko v horach u mesta Hanoj
velka mıstnost se tremi vyznacenymi mısty
64 ruzne velkych zlatych disku
podle vestby majı mnisi presouvat disky z prvnıho na tretımısto
a az to dokoncı ...
24 / 72
![Page 25: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/25.jpg)
Hanojske veze: pravidla
N disku ruznych velikostı naskladanych na sobe
vzdy muze byt jen mensı disk polozen na vetsım
moznost presunout jeden hornı disk na jiny kolıcek
cıl: presunout vse z prvnıho na tretı
25 / 72
![Page 26: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/26.jpg)
Hanojske veze: resenı
A B C A B C A B C A B C
A B CA B CA B CA B C
26 / 72
![Page 27: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/27.jpg)
Hanojske veze: vystup programu
>>> solve(3, "A", "B", "C")
A -> B
A -> C
B -> C
A -> B
C -> A
C -> B
A -> B
27 / 72
![Page 28: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/28.jpg)
Hanojske veze: rekurzivnı resenı
def solve(n, start, end, auxiliary):
if n == 1:
print(start, "->", end)
else:
solve(n-1, start, auxiliary, end)
solve(1, start, end, auxiliary)
solve(n-1, auxiliary, end, start)
28 / 72
![Page 29: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/29.jpg)
Resenı vcetne vypisovanı stavu
*
***
*****
-------------------
***
***** *
-------------------
***** *** *
-------------------
*
***** ***
-------------------
*
*** *****
-------------------
* *** *****
-------------------
29 / 72
![Page 30: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/30.jpg)
Stav ulohy, reprezentace
stav ulohy = rozmıstenı disku na kolıcıch
disky na kolıku A → seznam
celkovy stav:
3 promenne, v kazde seznam – nepekneseznam seznamu, kolıky interne znacıme 0, 1, 2
prıklad stavu (6 disku): [[4], [5, 2, 1], [6, 3]]
30 / 72
![Page 31: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/31.jpg)
Resenı vcetne vypisovanı stavu
def solve(n, start, end, aux, state):
if n==1:
disc = state[start].pop()
state[end].append(disc)
print_state(state)
else:
solve(n-1, start, aux, end, state)
solve(1, start, end, aux, state)
solve(n-1, aux, end, start, state)
def solve_hanoi(n):
state = [list(range(n,0,-1)), [], []]
print_state(state)
solve(n, 0, 2, 1, state)
31 / 72
![Page 32: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/32.jpg)
Vypisovanı stavu – jednoduse
def print_state(state):
print(state)
print("--")
def print_state(state):
for i in range(3):
print("Peg", chr(ord(’A’)+i), state[i])
print("--")
32 / 72
![Page 33: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/33.jpg)
Vypisovanı stavu – textova grafika
def print_state(state):
n = sum([len(s) for s in state])
for y in range(n+1):
line = ""
for peg in range(3):
for x in range(-n+1, n):
if len(state[peg]) > n-y and
abs(x) < state[peg][n-y]:
line += "*"
else:
line += " "
line += " "
print(line)
print("-"*(n*6+1))
33 / 72
![Page 34: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/34.jpg)
Sierpinskeho fraktal
rekurzivne definovany geometricky utvar
34 / 72
![Page 35: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/35.jpg)
Sierpinskeho fraktal
35 / 72
![Page 36: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/36.jpg)
Sierpinskeho fraktal: kod
def sierpinski(n, length):
if n == 1:
triangle(length)
else:
for i in range(3):
sierpinski(n - 1, length)
forward((2 ** (n - 1)) * length)
right(120)
36 / 72
![Page 37: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/37.jpg)
Dalsı podobne fraktaly
37 / 72
![Page 38: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/38.jpg)
Robotanik
tutor.fi.muni.cz, uloha Robotanik
jednoduche”graficke“ programovanı robota
tezsı prıklady zalozeny na rekurzi
vizualizace prubehu”vypoctu“, zanorovanı a vynorovanı z
rekurze
38 / 72
![Page 39: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/39.jpg)
Robotanik – Kurz pocıtanı
rekurze jako”pamet’“
39 / 72
![Page 40: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/40.jpg)
Robotanik
40 / 72
![Page 41: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/41.jpg)
Pokryvanı plochy L kostickami
mrızka 8× 8 s chybejıcım levym hornım polem
ukol: pokryt zbyvajıcı polıcka pomocı L kosticek
rozsırenı:
rozmer 2n × 2n
chybejıcı libovolne poleobarvenı 3 barvami, aby sousedi byli ruznı
41 / 72
![Page 42: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/42.jpg)
Ukazky resenı
42 / 72
![Page 43: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/43.jpg)
Resenı
rozdelit na ctvrtiny
umıstit jednu kostku
rekurzivne aplikovat resenı na jednotlive casti
43 / 72
![Page 44: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/44.jpg)
Kahoot
44 / 72
![Page 45: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/45.jpg)
Kahoot: program A
def magic(n):
return n + magic(n)
45 / 72
![Page 46: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/46.jpg)
Kahoot: program B
def test(n):
if n > 0:
print(n, end="")
test(n-1)
print(n, end="")
test(3)
46 / 72
![Page 47: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/47.jpg)
Premyslenı o funkcıch (rekurzivnıch obzvlast’)
obecne pro funkce:
ujasnit vstupne-vystupnı chovanı nez zacnu psat funkci
rekurzivnı funkce navıc:
pri psanı funkce predpokladam, ze mam jiz funkci hotovou
problem prevedu na resenı mensıho problemu (ktery jizumım vyresit)
osetrım”koncovou podmınku“
47 / 72
![Page 48: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/48.jpg)
Otocenı retezce rekurzivne
>>> reverse("star wars")
’sraw rats’
def reverse(s):
if len(s) <= 1: return s
return reverse(s[1:]) + s[0]
48 / 72
![Page 49: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/49.jpg)
Otocenı retezce rekurzivne
>>> reverse("star wars")
’sraw rats’
def reverse(s):
if len(s) <= 1: return s
return reverse(s[1:]) + s[0]
48 / 72
![Page 50: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/50.jpg)
Kontrolnı otazka
Co dela nasledujıcı funkce (vstup je retezec)?
def magic(s):
if len(s) <= 1: return s
return magic(s[1:])
49 / 72
![Page 51: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/51.jpg)
Seznam vnorenych seznamu
Seznam cısel a vnorenych seznamu cısel (SCAVSC) je seznam,ktery obsahuje cısla nebo SCAVSC.
rekurzivnı datova struktura
scavsc = [[2, 8], 4, [3, [1, 7], 6], [2, 4]]
Jak vypocıtat soucet vsech cısel?
50 / 72
![Page 52: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/52.jpg)
Soucet vnorenych seznamu
def nested_list_sum(alist):
total = 0
for x in alist:
if isinstance(x, list):
total += nested_list_sum(x)
else:
total += x
return total
51 / 72
![Page 53: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/53.jpg)
Prıklady pouzitı rekurze v informatice
Eucliduv algoritmus – NSD
vyhledavanı opakovanym pulenım
radicı algoritmy (quicksort, mergesort)
generovanı permutacı, kombinacı
fraktaly
prohledavanı grafu do hloubky
gramatiky
52 / 72
![Page 54: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/54.jpg)
Eukliduv algoritmus rekurzivne
def nsd(a,b):
if b == 0:
return a
else:
return nsd(b, a % b)
53 / 72
![Page 55: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/55.jpg)
Vyhledavanı opakovanym pulenım
hra na 20 otazek
hledanı v seznamu
hledanı v binarnım stromu
54 / 72
![Page 56: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/56.jpg)
Vyhledavanı: rekurzivnı varianta
def binary_search(value, alist, lower, upper):
if lower > upper:
return False
mid = (lower + upper) // 2
if alist[mid] < value:
return binary_search(value, alist, mid+1, upper)
elif alist[mid] > value:
return binary_search(value, alist, lower, mid-1)
return True
55 / 72
![Page 57: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/57.jpg)
Radicı algoritmy
quicksort
vyber pivotarozdel na mensı a vetsızavolej quicksort na podcasti
mergesort
rozdel na polovinukazdou polovinu serad’ pomocı mergesortspoj obe poloviny
56 / 72
![Page 58: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/58.jpg)
Generovanı permutacı, kombinacı
permutace mnoziny = vsechna mozna poradı
prıklad: permutace mnoziny {1, 2, 3, 4}jak je vypsat systematicky?jak vyuzıt rekurzi?
k-prvkove kombinace n-prvkove mnoziny = vsechnymozne vybery k prvku
prıklad: 3-prvkove kombinace mnoziny {A,B,C ,D,E}jak je vypsat systematicky?jak vyuzıt rekurzi?
57 / 72
![Page 59: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/59.jpg)
Kombinace
(n
k
)=
(n − 1
k − 1
)+
(n − 1
k
)
def combinations(alist, k):
if k == 0: return [[]]
if len(alist) < k: return []
output = []
for comb in combinations(alist[1:], k-1):
comb.append(alist[0])
output.append(comb)
output.extend(combinations(alist[1:], k))
return output
58 / 72
![Page 60: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/60.jpg)
Nevhodne pouzitı rekurze
ne kazde pouzitı rekurze je efektivnı
Fibonacciho posloupnost (kralıci):
f1 = 1
f2 = 1
fn = fn−1 + fn−2
1, 1, 2, 3, 5, 8, 13, 21, 34, . . .
Vi Hart: Doodling in Math: Spirals, Fibonacci, and Being a Plant
59 / 72
![Page 61: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/61.jpg)
Fibonacciho posloupnost: rekurzivne
def fib(n):
if n <= 2: return 1
else: return fib(n-1) + fib(n-2)
60 / 72
![Page 62: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/62.jpg)
Fibonacciho posloupnost: rekurzivnı vypocet
fib(4)
fib(2)
1
fib(3)
fib(2)fib(1)
1 1
fib(5)
+
+ + fib(3)
fib(2)fib(1)
1 1
+
61 / 72
![Page 63: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/63.jpg)
Problem N dam
sachovnice N × N
rozestavit N dam tak, aby se vzajemne neohrozovaly
zkuste pro N = 4
pozn. specialnı prıpad”problemu splnenı podmınek“
62 / 72
![Page 64: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/64.jpg)
Problem N dam – resenı
63 / 72
![Page 65: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/65.jpg)
Problem N dam – algoritmus
ilustrace algoritmu backtracking
hruba sıla, ale”chytre“
zacneme s prazdnym planem, systematicky zkousımeumist’ovat damy
pokud najdeme kolizi, vracıme se a zkousıme jinoumoznost
prirozeny rekurzivnı zapis
64 / 72
![Page 66: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/66.jpg)
Problem N dam – backtracking
řešení
65 / 72
![Page 67: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/67.jpg)
Problem N dam – reprezentace stavu
pro kazde pole si pamatujeme, zda na nem je/nenı dama
dvourozmerny seznam True/False
pro kazdou damu si pamatujeme jejı souradnice
seznam dvojic xi , yi
pro kazdy radek si pamatujeme, v kterem sloupci je dama
seznam cısel xinejvyhodnejsı reprezentace
66 / 72
![Page 68: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/68.jpg)
Problem N dam – resenı
def solve_queens(n, state):
if len(state) == n:
output(state)
return True
else:
for i in range(n):
state.append(i)
if check_queens(state):
if solve_queens(n, state): return True
state.pop()
return False
67 / 72
![Page 69: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/69.jpg)
Kdy se ohrozujı dve damy?
x
y
1
1
x2
y2
68 / 72
![Page 70: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/70.jpg)
Kdy se ohrozujı dve damy?
x
y
1
1
x2
y2
x1 = x2y1 = y2x1 + y1 = x2 + y2x1 − y1 = x2 − y2
69 / 72
![Page 71: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/71.jpg)
Problem N dam – resenı
def output(state):
for y in range(len(state)):
for x in range(len(state)):
if state[y]==x: print("X", end=" ")
else: print(".", end=" ")
print()
print()
def check_queens(state):
for y1 in range(len(state)):
x1 = state[y1]
for y2 in range(y1+1, len(state)):
x2 = state[y2]
if x1 == x2 or x1-y1 == x2-y2 or\
x1+y1 == x2+y2:
return False
return True70 / 72
![Page 72: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/72.jpg)
Backtracking – dalsı prıklady pouzitı
mnoho logickych uloh:
Sudoku a podobne ulohyalgebrogramy (SEND + MORE = MONEY)
optimalizacnı problemy (napr. rozvrhovanı, planovanı)
obecny”problem splnenı podmınek“
71 / 72
![Page 73: Rekurze - Masaryk Universityxpelanek/IB111/slidy/rekurze.pdfalespon polovina hlas u )rozd eleno, hotovo jinak )navrhuj c pir at zabit, pokra cuje druh y nejstar s (a tak d ale) (rekurze!)](https://reader030.vdocuments.site/reader030/viewer/2022040813/5e59538a68b0c41d3f0ce786/html5/thumbnails/73.jpg)
Shrnutı
rekurze: vyuzitı rekurze pro definici sebe sama
logicke ulohy: Hanojske veze, L kosticky, damy nasachovnici
fraktaly
aplikace v programovanı: vyhledavanı, razenı,prohledavanı grafu
klıcova myslenka v informatice
nezapomente na piraty
72 / 72