modul10

background image

Metody -

algorytmy

rekurencyjn

e i

biblioteka

metod

background image

Przegląd zagadnień

Pojęcie rekurencji
Przykład - Wieże Hanoi
Nadużywanie rekurencji
Algorytmy z powrotami
Demo: utworzenie biblioteki funkcji
Podsumowanie
Pytania sprawdzające
Laboratorium

background image

Pojęcie rekurencji

Zdolność metody (funkcji) do wywołania samej

siebie
Typy rekurencji

rekurencja bezpośrednia

rekurencja pośrednia

Metoda dziel i zwyciężaj
Metoda iteracyjna

Metoda rekurencyjna

static ulong Silnia(uint n){

ulong iloczyn = 1;
for(uint i=2;i<=n;i++)

iloczyn *= i;

return iloczyn;

}

static ulong Silnia(uint n){

if(n == 0 || n == 1)

return 1;

return n * Silnia(n-1);
}

background image

Przykład - Wieże Hanoi

w każdym kroku można przenieść dokładnie jeden krążek
krążek nie może być nigdy nałożony na krążek o

mniejszej średnicy

Mamy trzy pręty i n krążków o różnych średnicach,

które są nanizane są na pierwszy pręt w porządku

malejących średnic tworząc wieżę. Chcemy przenieść

krążki z pierwszego pręta na drugi, przy pomocy pręta

trzeciego stosując następujące zasady:

static void Hanoi(uint n, string zrodlo,string cel, string tmp)

{

if (n == 1)

Console.WriteLine("Przeniś z prętu {0} na pręt {1}.",

zrodlo, cel);

else{

Hanoi(n - 1, zrodlo, tmp, cel);

Console.WriteLine("Przeniś z prętu {0} na pręt {1}.",

zrodlo, cel);

Hanoi(n - 1, tmp, cel, zrodlo);

}

}

background image

Nadużywanie rekurencji

static ulong Fib(ushort n){

if(n<2)

return n;

return Fib(n-1)+Fib(n-2);

}

Unikajmy rekurencji, jeżeli istnieje

oczywiste rozwiązanie iteracyjne!!!
Ciąg Fibonacciego:

2

)

2

(

)

1

(

2

)

(

n

dla

n

Fib

n

Fib

n

dla

n

n

Fib

Fib(

5

)

Fib(

4

)

Fib(

3

)

Fib(

3

)

Fib(

2

)

Fib(

2

)

Fib(

1

)

Fib(

2

)

Fib(

1

)

Fib(

1

)

Fib(

0

)

Fib(

1

)

Fib(

0

)

Fib(

1

)

Fib(

0

)

1

1

0

1

0

1

background image

Algorytmy z powrotami

Star

t

Metoda Sprawdz
we: krok - opis aktualnego
stanu

Wybierz następny, dopuszczalny, nieodwiedzony stan (ruch)

dostępny z bieżącej pozycji - krok, oznacz go jako krok2.

Oznacz stan krok2 jako odwiedzony

Czy osiągnięto

cel

Sprawdz(krok2);

N

Czy istnieje następny, dopuszczalny,

nieodwiedzony

stan dostępny z bieżącej pozycji

N

Stop

osiognietoCel=true;

T

osiognietoCel==

true

Oznacz stan krok2 jako nieodwiedzony

Stop

T

T

N

osignietoCel - pomocnicza
zmienne współdzielona

osiognietoCel=false;

background image

Demo: utworzenie biblioteki

funkcji

Szablon projektu

Class Library

Korzystanie z bibliotki

w oknie Solution Explorer z menu
kontekstowego związanego z projektem
w którym chcemy skorzystać z biblioteki
wybrać Add Reference...

background image

Podsumowanie

Pojęcie rekurencji
Przykład - Wieże Hanoi
Nadużywanie rekurencji
Algorytmy z powrotami
Demo: utworzenie biblioteki funkcji
Podsumowanie
Pytania sprawdzające
Laboratorium

background image

Pytania sprawdzające

Co to jest rekurencja?
Na czym polega strategia "dziel i

rządź"?
Na czym polega programowanie

dynamiczne?

background image

Laboratorium

Ćwiczenie 1:

Sortowanie szybkie - quick
sort

Ćwiczenie 2:

Problem ośmiu hetmanów


Document Outline


Wyszukiwarka

Podobne podstrony:
modul14
Modul1, Courseware Development Tools
Modul1, Courseware Development Tools
ITA 103 Modul11
ITA 103 Modul13
kolokwium modul1 B 2011
ITA 103 Modul12
modul1
modul11
NLP w biznesie moduł1
Module39 moduł1 materiał
modul13
kolokwium modul1 B 2011
modul12
ITA 103 Modul10
Modul12, Courseware Development Tools
ITA 103 Modul14
modul14
gramatyka modul1

więcej podobnych podstron