rok akademicki 2017/18 semestr zimowytarnowski/201718z/wdp_ikw_w07.pdfSilnia Podsumowanie • Aby...

19
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 7 Karol Tarnowski [email protected] A-1 p. 411B

Transcript of rok akademicki 2017/18 semestr zimowytarnowski/201718z/wdp_ikw_w07.pdfSilnia Podsumowanie • Aby...

  • Wstęp do programowaniaINP001213Wclrok akademicki 2017/18

    semestr zimowy

    Wykład 7

    Karol Tarnowski

    [email protected]

    A-1 p. 411B

    mailto:[email protected]

  • 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

  • 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

  • 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

  • Rekurencja ogonowaSilnia

  • silnia2(5)

    silnia3(5,1)

    silnia3(4,5)

    silnia3(3,20)

    silnia3(2,60)

    silnia3(1,120)

    silnia3(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ń