View
8
Download
0
Category
Preview:
Citation preview
Wstęp do programowaniaINP001213Wclrok akademicki 2019/20
semestr zimowy
Wykład 7
Karol Tarnowski
karol.tarnowski@pwr.edu.pl
A-1 p. 411B
mailto:karol.tarnowski@pwr.edu.pl
Na podstawie:
• M. M. Sysło, Algorytmy
Plan prezentacji
• Algorytmy rekurencyjne
– schemat Hornera
– algorytm Eukildesa
– obliczanie potęgi
– wieże Hanoi
• Iteracja a rekurencja
– ciąg Fibonacciego
– symbol Newtona
– silnia
• Rekurencja ogonowa
wn(x) = a0xn + a1x
n-1 + … + an-1x1 + an
wn(x) = (a0xn-1 + a1x
n-2 + … + an-1)x + an
wn(x) = wn-1(x)x + an
wn-1(x) = a0xn-1 + a1x
n-2 + … + an-1
RekurencjaSchemat Hornera
wn(x) = wn-1(x)x + an
w0(x) = a0
RekurencjaSchemat Hornera
0
1
, dla 0,
, dla 1.nn n
a nw x
w x x a n
RekurencjaSchemat Hornera
w3(x) = w2(x)x + a3
w2(x) = w1(x)x + a2
w1(x) = w0(x)x + a1
w0(x) = a0
w1(x) = a0x + a1
w2(x) = (a0x + a1)x+a2
w3(x) = ((a0x + a1)x+a2)x + a3
• wywołania rekurencyjne
• obliczenia właściwe
• poziom rekurencji
Rekurencja
zakładając, że m ≤ n
Algorytm Euklidesa
, dla m 0,NWD ,
NWD mod , , dla 0.
nm n
n m m m
Obliczanie potęgi
22
21 2
, dla 1
, parzyste
, nieparzyste
mm
m
x m
x x m
x x m
Przenieś wszystkie krążki z A na B (można użyć
pomocniczo C), przy czym
• krążki wolno przenosić pojedynczo,
• nie można kłaść krążków większych na
mniejszych.
Wieże Hanoi
A B C
Przenieś wszystkie krążki z A na B (można użyć
pomocniczo C), przy czym
• krążki wolno przenosić pojedynczo,
• nie można kłaść krążków większych na
mniejszych.
Wieże Hanoi
A B C
Przenieś wszystkie krążki z A na B (można użyć
pomocniczo C), przy czym
• krążki wolno przenosić pojedynczo,
• nie można kłaść krążków większych na
mniejszych.
Wieże Hanoi
A B C
Przenieś wszystkie krążki z A na B (można użyć
pomocniczo C), przy czym
• krążki wolno przenosić pojedynczo,
• nie można kłaść krążków większych na
mniejszych.
Wieże Hanoi
A B C
Przenieś wszystkie krążki z A na B (można użyć
pomocniczo C), przy czym
• krążki wolno przenosić pojedynczo,
• nie można kłaść krążków większych na
mniejszych.
Wieże Hanoi
A B C
Przenieś wszystkie krążki z A na B (można użyć
pomocniczo C), przy czym
• krążki wolno przenosić pojedynczo,
• nie można kłaść krążków większych na
mniejszych.
Wieże Hanoi
A B C
Przenieś wszystkie krążki z A na B (można użyć
pomocniczo C), przy czym
• krążki wolno przenosić pojedynczo,
• nie można kłaść krążków większych na
mniejszych.
Wieże Hanoi
A B C
Przenieś wszystkie krążki z A na B (można użyć
pomocniczo C), przy czym
• krążki wolno przenosić pojedynczo,
• nie można kłaść krążków większych na
mniejszych.
Wieże Hanoi
A B C
Spostrzeżenia:
• najmniejszy krążek zawsze jest na górze,
• na dwóch pozostałych palikach są krążki różnych
rozmiarów (tylko jeden można przenieść).
Wieże HanoiRozwiązanie iteracyjne
A B C
1. Przenieś najmniejszy krążek na następny palik.
Jeśli wszystkie krążki są przeniesione to
zakończy.
2. Wykonaj jedyne możliwe przeniesienie krążka,
który nie jest najmniejszym krążkiem, i idź do
kroku 1.
Wieże HanoiRozwiązanie iteracyjne
A B C
1. Przenieś najmniejszy krążek na następny palik.
Jeśli wszystkie krążki są przeniesione to
zakończy.
2. Wykonaj jedyne możliwe przeniesienie krążka,
który nie jest najmniejszym krążkiem, i idź do
kroku 1.
Wieże HanoiRozwiązanie iteracyjne
A B C
1. Przenieś najmniejszy krążek na następny palik.
Jeśli wszystkie krążki są przeniesione to
zakończy.
2. Wykonaj jedyne możliwe przeniesienie krążka,
który nie jest najmniejszym krążkiem, i idź do
kroku 1.
Wieże HanoiRozwiązanie iteracyjne
A B C
1. Przenieś najmniejszy krążek na następny palik.
Jeśli wszystkie krążki są przeniesione to
zakończy.
2. Wykonaj jedyne możliwe przeniesienie krążka,
który nie jest najmniejszym krążkiem, i idź do
kroku 1.
Wieże HanoiRozwiązanie iteracyjne
A B C
1. Przenieś najmniejszy krążek na następny palik.
Jeśli wszystkie krążki są przeniesione to
zakończy.
2. Wykonaj jedyne możliwe przeniesienie krążka,
który nie jest najmniejszym krążkiem, i idź do
kroku 1.
Wieże HanoiRozwiązanie iteracyjne
A B C
1. Przenieś najmniejszy krążek na następny palik.
Jeśli wszystkie krążki są przeniesione to
zakończy.
2. Wykonaj jedyne możliwe przeniesienie krążka,
który nie jest najmniejszym krążkiem, i idź do
kroku 1.
Wieże HanoiRozwiązanie iteracyjne
A B C
1. Przenieś najmniejszy krążek na następny palik.
Jeśli wszystkie krążki są przeniesione to
zakończy.
2. Wykonaj jedyne możliwe przeniesienie krążka,
który nie jest najmniejszym krążkiem, i idź do
kroku 1.
Wieże HanoiRozwiązanie iteracyjne
A B C
1. Przenieś najmniejszy krążek na następny palik.
Jeśli wszystkie krążki są przeniesione to
zakończy.
2. Wykonaj jedyne możliwe przeniesienie krążka,
który nie jest najmniejszym krążkiem, i idź do
kroku 1.
Wieże HanoiRozwiązanie iteracyjne
A B C
Wieże HanoiLiczba przeniesień krążków
1, dla n 1,
2 1 1, dla n 1.h n
h n
Ciąg Fibonacciego
0 dla 0,
1 dla 1,
1 2 dla 1.
n
F n n
F n F n n
F(5)
F(4)
F(3)F(2)
F(1)
F(0)F(1)
F(2)F(1)
F(0)
F(3)F(2)
F(1)
F(0)F(1)
Ciąg FibonacciegoWywołania rekurencyjne
Symbol Newtona
!
dla 0! !
n nk n
k k n k
1 dla 0 lub
1 1dla 0
1
k k nn
n nk nk
k k
1 dla 0 lub
1dla 0
1
k k nn
n nk nk
k k
Silnia
1 dla 0,
!1 ! dla 1.
nn
n n n
! 1 2 3n n
Silnia
Silnia
Rekurencja ogonowaSilnia
silnia_ogon(5)
silnia_pom(5,1)
silnia_pom(4,5)
silnia_pom(3,20)
silnia_pom(2,60)
silnia_pom(1,120)
silnia_pom(0,120)
120
Rekurencja ogonowaSilnia
Podsumowanie
• Aby zrozumieć rekurencję, trzeba zrozumieć
rekurencję
• Obliczenia rekurencyjne składają się z dwóch
faz:
– wywołania rekurencyjne
– powrót z wywołań obejmujący wykonywanie
właściwych obliczeń (lub tylko przenoszenie wyników)
• Pamiętaj o warunku stopu
• Wywołania rekurencyjne mogą prowadzić do
nadmiarowych obliczeń
Recommended