ALGORYTMY I STRUKTURY DANYCH

Podobne dokumenty
FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

Rekurencja (rekursja)

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

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

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie - wykład 4

Rekurencja. Przykład. Rozważmy ciąg

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

5. Rekurencja. Przykłady

Rekurencja. Przygotowała: Agnieszka Reiter

Projektowanie algorytmów rekurencyjnych

Język C, tablice i funkcje (laboratorium, EE1-DI)

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

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

Programowanie komputerowe. Zajęcia 2

Programowanie komputerowe. Zajęcia 3

Programowanie strukturalne i obiektowe. Funkcje

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

LISTA 5. C++ PETLE for, while, do while

Warsztaty dla nauczycieli

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

Poprawność semantyczna

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

Algorytm. a programowanie -

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch

Zadania język C++ Zad. 1. Napisz program wczytujący z klawiatury wiek dwóch studentów i wypisujący informację o tym, który z nich jest starszy.

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

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

WHILE (wyrażenie) instrukcja;

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

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

6. Pętle while. Przykłady

Programowanie obiektowe i C++ dla matematyków

Zaawansowane algorytmy i struktury danych

Zaprojektować i zaimplementować algorytm realizujący następujące zadanie.

Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

WHILE (wyrażenie) instrukcja;

Analiza algorytmów zadania podstawowe

Programowanie w Baltie klasa VII

I. Podstawy języka C powtórka

Algorytmy i struktury danych. Wykład 4

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

Zadanie 1. Test (6 pkt) Zaznacz znakiem X w odpowiedniej kolumnie P lub F, która odpowiedź jest prawdziwa, a która fałszywa.

Algorytm i złożoność obliczeniowa algorytmu

Wstęp do programowania

Projektowanie aplikacji internetowych laboratorium

4. Funkcje. Przykłady

Podstawy programowania funkcjonalnego

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

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

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

1 Wprowadzenie do algorytmiki

Ciąg Fibonacciego jako szczególny przykład ciągu określonego rekurencyjnie. Przykłady rekurencji w informatyce

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

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

Algorytmy i Struktury Danych

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy

Programowanie w języku Python. Grażyna Koba

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Algorytmy i struktury danych

Algorytmy i język C++

EGZAMIN MATURALNY Z INFORMATYKI

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Programowanie w C/C++ Instrukcje - konstrukcje powtórka. LABORKA Piotr Ciskowski

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Programowanie dynamiczne

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

2.8. Algorytmy, schematy, programy

Złożoność obliczeniowa zadania, zestaw 2

Klasy: String, Random, Math. Korzystanie z dokumentacji.

Zajęcia 4 procedury i funkcje

Instrukcje sterujące

EGZAMIN MATURALNY Z INFORMATYKI

Metody Metody, parametry, zwracanie wartości

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

EGZAMIN MATURALNY Z INFORMATYKI 17 MAJA 2016 POZIOM PODSTAWOWY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut

Rekurencja/rekursja. Iluzja istnienia wielu kopii tego samego algorytmu (aktywacji) Tylko jedna aktywacja jest aktywna w danej chwili

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

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu:

Wstęp do informatyki Ćwiczenia. Piotr Fulmański

Język C zajęcia nr 5

Laboratorium nr 1. i 2.

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

Algorytmy sortujące i wyszukujące

Lab 9 Podstawy Programowania

1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji.

Wstęp do informatyki

EGZAMIN MATURALNY Z INFORMATYKI CZERWIEC 2011 POZIOM PODSTAWOWY CZĘŚĆ I WYBRANE: Czas pracy: 75 minut. Liczba punktów do uzyskania: 20 WPISUJE ZDAJĄCY

Teoretyczne podstawy informatyki

Pzetestuj działanie pętli while i do...while na poniższym przykładzie:

SYSTEMY LICZBOWE 275,538 =

Programowanie - instrukcje sterujące

Transkrypt:

KATEDRASYSTEMÓWOBLICZENIOWYCH ALGORYTMY I STRUKTURY DANYCH 1.Rekurencja Rekurencja inaczej rekursja (ang. recursion) to wywołanie z poziomu metody jej samej. Programowanie z wykorzytaniem rekurencji pozwala na przejrzyste zapisanie algorytmów, w których wynik końcowy jest złożeniem wielu wyników cząstkowych (np. wydajne algorytmy sortujące). Sprawdź co zwraca zapytanie: rekurencja w wyszukiwarce Google. Tworząc metody rekurencyjne musimy pamiętać o odpowiednim zakończeniu wywołań rekurencyjnych (nie mogą one odbywać się w nieskończoność). Zobaczmy poniższy kod źródłowy: static void { System.out.println(""); ; System.out.println(""); ; 1

Algorytmy i Struktury Danych Sposób realizacji programu: main(){ itd. Efekt uruchomienia programu:... Exception in thread "main" java.lang.stackoverflowerror Wywołania rekurencyjne muszą zakończyć się (w metodzie musi zostać zdefiniowany warunek zatrzymania się algorytmu, warunek stopu). Programzwarunkiemstopu Zmodyfikowana wersja programu zawierająca warunek stopu może wyglądać w następujący sposób: static int licz = 0; static void { licz++; System.out.println(""); if (licz <=5 ) ; // warunek stopu System.out.println(""); ; 2

Rekurencja Realizacja programu main(){ licz = 1 licz = 2 licz = 3 licz = 4 licz = 5 licz = 6 Efekt uruchomienia programu: Co się stanie jeśli jeszcze raz uruchomimy naszą metodę? Dlaczego tak się dzieje? Rekurencyjne obliczenie silni Wykorzystajmy naszą wiedzę do napisania prostego programu obliczającego wartość silni dla dowolnego n. static int silnia(int n) { int pomoc; System.out.println("Wywołanie: silnia(" + n + ")"); if ((n == 0) (n == 1)) pomoc = 1; else pomoc = n * silnia(n-1); System.out.println("Zwrócenie wyniku: " + n + "! = " + pomoc); return pomoc; System.out.println("4! = " + silnia(4)); 3

Algorytmy i Struktury Danych Sposób realizacji programu: main() { silnia(4); 24 n = 4; pomoc = 4 * silnia(3); Efekt działania programu: Wywołanie: silnia(4) Wywołanie: silnia(3) Wywołanie: silnia(2) Wywołanie: silnia(1) Zwrócenie wyniku: 1! = 1 Zwrócenie wyniku: 2! = 2 Zwrócenie wyniku: 3! = 6 Zwrócenie wyniku: 4! = 24 4! = 24 6 n = 3; pomoc = 3 * silnia(2); 2 n = 2; pomoc = 2 * silnia(1); 1 n = 1; pomoc = 1; Uproszczona wersja programu (bez zmiennej pomoc, oraz wyświetlania poszczególnych etapów działania aplikacji) może wygladać tak: static int silnia(int n) { if (n == 0) return 1; else return (n * silnia(n-1)); System.out.println("4! = " + silnia(4)); Powyższa wersja jest nieodporna na błędy. Co się stanie jeśli wywołamy metodę silnia() z parametrem ujemnym? 4

Rekurencja CiągFibonacciego Wykorzystanie rekurencji może okazać się bardzo kosztowne. Rozwiązania iteracyjne nieraz bywają bardziej wydajne. Zobaczmy jak wygląda definicja ciągu Fibonacciego. Poniżej diagram przedstawia rekurencyjne obliczenie piątego elementu ciągu. fib(2) fib(3) fib(0) fib(4) fib(5) fib(2) fib(0) fib(2) Zauważ ile razy algorytm oblicza te same dane, a jest to dopiero piąty element ciągu. Zadaniadowykonania fib(3) fib(0) 1. Napisz rekurencyjną metodę obliczającą sumę 1 + 2 +... + n, gdzie wartość n jest parametrem funkcji. 2. Napisz rekurencyjną metodę obliczającą sumę cyfr w liczbie całkowitej podanej jako parametr. 3. Każdego roku pewna populacja królików podwaja się. Jeżeli początkowo było m królików to ile ich będzie po n latach? Napisz odpowiednią metodę rekurencyjną. 4. Napisz rekurencyjną metodę zwracającą podany jako parametr ciąg znaków w odwrotnej kolejności. 5

Algorytmy i Struktury Danych 5. Napisz w postaci rekurencyjnej metodę wyznaczającą, za pomocą algorytmu Euklidesa, największy wspólny dzielnik dwóch liczb całkowitych dodatnich. 6. Napisz z wykorzystaniem rekurencji metodę potęga obliczającą n-tą potęgę liczby m. np.: wywołanie: potega(3, 1) zwróci wynik: 3 wywołanie: potega(3, 2) zwróci wynik: 9 wywołanie: potega(3, 3) zwróci wynik: 27 7. Napisz metodę wyznaczającą rekurencyjnie n-ty element ciągu Fibonacciego. Po wyznaczeniu n-tego elementu wyświetl ile razy metoda została wywołana. Zastanów się i przedstaw również rozwiązanie iteracyjne oraz sprawdź za pomocą klasy Stoper czasy wykonania obu metod. Klasa Stoper jest dostępna w zadaniach z przedmiotu Programowanie Komputerów. 8. Napisz metodę wyznaczającą binarną reprezentację podanej jako parametr liczby całkowitej. Zastosuj rozwiązanie rekurencyjne. Jak wiadomo wartość binarna wyznaczana jest poprzez odczytanie od tyłu reszt z dzielenia przez 2, a właściwy porządek cyfr można osiągnąć poprzez odpowiednie zastosowanie rekurencji. 6