Projektowanie algorytmów rekurencyjnych

Podobne dokumenty
Projektowanie algorytmów z wykorzystaniem ptli for

Projektowanie algorytmów z blokami decyzyjnymi

ALGORYTMY I STRUKTURY DANYCH

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Algorytmy z powrotami. Algorytm minimax

Aplikacje w środowisku Java

Metody Metody, parametry, zwracanie wartości

Rekurencja (rekursja)

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

Wykład 5: Więcej o Klasach i Metodach

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Zaawansowane aplikacje WWW - laboratorium

Wybrane algorytmy tablicowe

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk Studenckie Koªo Automatyków SKALP

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wykład 8: Obsługa Wyjątków

Wykład 4: Klasy i Metody

JAVA W SUPER EXPRESOWEJ PIGUŁCE

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

Programowanie obiektowe

Programowanie, algorytmy i struktury danych

Projektowanie aplikacji internetowych laboratorium

5. Rekurencja. Przykłady

Programowanie obiektowe

import java.util.locale; import java.util.scanner; public class Plecak {

Programowanie komputerowe. Zajęcia 3

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

Rekurencja. Przygotowała: Agnieszka Reiter

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie Obiektowe Ćwiczenie 4

IV Powiatowy Konkurs Matematyka, Fizyka i Informatyka w Technice Etap finałowy 1 kwietnia 2016

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

Systemy Rozproszone - Ćwiczenie 6

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Rekurencja, schemat rekursji i funkcje pierwotnie rekurencyjne

Programowanie obiektowe

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Sposoby przekazywania parametrów w metodach.

Wstęp do Informatyki

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Wykład 7: Pakiety i Interfejsy

Podstawy Java. Część II. mgr inż.marcin Borkowski

Platforma.NET. Laboratorium nr 1 Podstawy języka C#

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Programowanie - wykład 4

wiczenie 1 Podstawy j zyka Java. Instrukcje warunkowe

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Programowanie komputerowe. Zajęcia 2

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Katalog książek cz. 2

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Programowanie strukturalne i obiektowe. Funkcje

Programowanie obiektowe

Podstawy i języki programowania

Java. Programowanie Obiektowe Mateusz Cicheński

6. Pętle while. Przykłady

Programowanie obiektowe

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.

Programowanie obiektowe

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Wstęp do programowania

Język C zajęcia nr 11. Funkcje

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Język ludzki kod maszynowy

Gramatyki regularne i automaty skoczone

Warsztaty dla nauczycieli

Ćwiczenie nr 3. Temat: Definicje i wykorzystanie funkcji, parametry funkcji

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!!

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Tablice i łańcuchy znakowe jako obiektowe typy danych. dr Jarosław Skaruz

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie i projektowanie obiektowe

Wstęp do informatyki- wykład 2

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Podstawy języka Java. przygotował:

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

STWORZENIE PRZYKŁADOWEJ

Transkrypt:

C9 Projektowanie algorytmów rekurencyjnych wiczenie 1. Przeanalizowa działanie poniszego algorytmu dla parametru wejciowego n = 4 (rysunek 9.1): n i i<n Silnia(n) 0 1 N 1 1 1 N 1 2 3 1 T 1 2 N 2 1 T 1 2 T 2 3 N 6 4 Rys. 9.1.. Algorytm iteracyjny do obliczania silni z n. Zastanówmy si teraz, w jaki sposób algorytm iteracyjny zastpi algorytmem rekurencyjnym do obliczania silni z n według definicji: 0! = 1 n! = n*(n-1)!, gdzie n 1 Przeanalizujmy mechanizm oblicze silni z n. Z definicji wynika, e aby obliczy np. 4!, naley wykona kolejne kroki: START 4! = 4*(4-1)! = 4*3! 3! = 3*(3-1)! = 3*2! 2! = 2*(2-1)! = 2*1! 1! = 1*(1-1)! = 1*0! 0! = 1 (def.) STOP 1

Zbudujmy algorytm rekurencyjny obliczajcy warto funkcji Silnia(n), któr na podstawie definicji moemy zapisa jako: Silnia(0) = 1, Silnia(1) = 1, Silnia(n) = n*silnia(n-1). Algorytm główny (rysunek 9.2) ograniczy si jedynie do wczytania n, wywołania funkcji rekurencyjnej Silnia(n) i wyprowadzenia wyniku Silnia(n). Rys. 9.2. Algorytm główny obliczania silni. Nowym elementem jest tutaj wywołanie funkcji Silnia(n) zwracajcej wynik oblicze do miejsca wywołania. Algorytm: Funkcja Silnia(n) Krok 1. Jeli n = 0 lub n = 1, to wydrukuj wynik funkcji Silnia(n) = 1 i zakocz działanie algorytmu. Krok 2. W przeciwnym razie znajd wynik funkcji Silnia(n) = n*silnia(n-1) Krok 3. Drukuj wynik Silnia(n) i zakocz działanie algorytmu. Przykładowa implementacja tego algorytmu w jzyku Java moe by nastpujca: public class SilniaRek { public static void main(string[] args) { long x; for (int n = 0; n<=6; n++){ x = silnia(n); System.out.println(n + "! = " +x); static long silnia (int n){ long wynik; if (n>1) wynik = silnia(n-1)*n; else wynik = 1; return wynik; 2

Czsto zachodzi potrzeba wielokrotnego obliczania silni, co z oczywistych wzgldów jest kosztowne czasowo. Wemy dla przykładu znany nam symbol Newtona, wykorzystywany do obliczania liczby k-elementowych kombinacji bez powtórze ze zbioru n-elementowego, wyraony wzorem: C k n = n ( ) k n! = k!( n k)! Wyznaczenie algorytmu obliczania Symbolu Newtona wie si z koniecznoci uwzgldnienia trzykrotnego obliczania silni, dla: n!, k! i (n-k)! Poniej przedstawiono przykładowe rozwizania tego problemu w jzyku Java. Istot tych prorpozycji jest to, e wszystkie potrzebne wartoci funkcji silnia bd obliczane tylko raz i zapisane, a póniej tylko odczytywane. Taki sposób rozwizania bdziemy nazywa tablicowaniem funkcji. public class Silnia { private final int MAX_SILNIA = 100; private int[] silniatab = new int[max_silnia]; public static void main(string[] args) { Silnia silnia = new Silnia(); for(int i=0; i<6; i++){ try { System.out.println("n="+i+" : "+ silnia.silnia(i)); catch (Exception e) { System.out.println(e.getMessage()); for(int i=0; i<6; i++){ try { System.out.println("n="+i+" : "+ silnia.silniatablicowana(i)); catch (Exception e) { System.out.println(e.getMessage()); public int silnia(int n) throws Exception{ if (n==0 n==1){ 3

return 1; else{ return n*this.silnia(n-1); public int silniatablicowana(int n) throws Exception{ if (n >= MAX_SILNIA){ throw new Exception("Zbyt dua liczba"); if (silniatab[n] == 0) { return silniawypelnianie(n); else{ return silniatab[n]; private int silniawypelnianie(int n) throws Exception { if (n >= MAX_SILNIA){ throw new Exception("Zbyt dua liczba"); int wynik = 0; if (n==0 n==1){ wynik = 1; else{ wynik = n*this.silnia(n-1); silniatab[n] = wynik; return wynik; 4

ZADANIA DO SAMODZIELNEGO WYKONANIA ZADANIE 1. Skonstruowa schematy blokowe, opracowa algorytmy rekurencyjne w postaci listy kroków, schematów blokowych oraz kodu do obliczania: a) Liczby kombinacji k-elementowych ze zbioru n-elementowego. b) Liczby wariacji k-elementowych ze zbioru n-elementowego bez powtórze i z powtórzeniami. c) n-tego wyrazu cigu arytmetycznego i geometrycznego, jeli dane s a 1 i odpowiednio r i q. a 1 = a a n+1 = a n + r, a, r R Wskazówka. a 1 = a a n+1 = q*a n, a, q R Funkcja powinna posiada trzy parametry formalne: n, a 1 oraz r (bd q). d) Zapisa algorytmy z zadania 1 w jzyku C ++ i przetestowa ich działanie dla rónych n. e) Narysowa i opisa schematy realizacji poszczególnych poziomów rekurencji (analogicznie do rysunku 4.9 1 ). ZADANIE 2. Skonstruowa schematy blokowe, opracowa algorytmy rekurencyjne wraz z implementacj w jzyku C ++ procedury, która pobiera dowoln liczb naturaln n i odlicza od tej liczby a do zera. Procedura powinna spowodowa wypisanie kolejno liczb: n, n-1, n-2,..., 0. 1 Ochodek B., Ochodek M.: Algorytmy i struktury danych, Wyd. PWSZ w Pile, Piła 2003, s. 102. 5