Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Relevanta dokument
TENTAMEN I DATAVETENSKAP

Konstruktion av klasser med klasser

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

OOP Objekt-orienterad programmering

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

Föreläsning 13. Rekursion

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Föreläsning 6 Innehåll. Rekursion. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursiv problemlösning. Rekursion. Rekursivt tänkande:

Föreläsning 5. Rekursion

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Tentamen, Algoritmer och datastrukturer

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Klasshierarkier - repetition

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Rekursiva funktioner Algoritmer och datastrukturer Obligatorisk Laboration nr 5

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Föreläsning REPETITION & EXTENTA

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Inga hjälpmedel tillåtna.

Rekursion. Koffman & Wolfgang kapitel 5

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Föreläsning 11: Rekursion

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Rekursion och induktion för algoritmkonstruktion

OOP Objekt-orienterad programmering

Datastrukturer. föreläsning 3. Stacks 1

Länkade strukturer. (del 2)

Föreläsning 2 Datastrukturer (DAT037)

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

OOP Objekt-orienterad programmering

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Rekursion och induktion för algoritmkonstruktion

Föreläsning 12: Exempel och problemlösning

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Uno Holmer, Chalmers, :17 Uno Holmer, Chalmers, :17

Föreläsning 8 Innehåll

Föreläsning 1, vecka 7: Rekursion

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Classes och Interfaces, Objects och References, Initialization

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Föreläsning 12. Länkade listor

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Föreläsning 9 Innehåll

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Lösningsförslag till exempeltenta 1

Föreläsning 2. Länkad lista och iterator

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Objektorienterad programmering i Java

Laboration 13, Arrayer och objekt

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Föreläsning 3. Stack

Föreläsning 6: Introduktion av listor

Föreläsning 3. Stack

Objekt och klasser - Introduktion

Tentamen i Objektorienterad programmering

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Föreläsning 8: Exempel och problemlösning

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Modeller, Objekt och Klasser

Föreläsning 2, vecka 8: Repetition

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

LÖSNINGSFÖRSLAG TILL TENTAMEN PROGRAMMERINGSMETODIK MOM2 - JAVA, 4P.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Polymorfi. Objektorienterad och komponentbaserad programmering

OOP Objekt-orienterad programmering

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 4 Innehåll

TENTAMEN OOP

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Länkade strukturer, parametriserade typer och undantag

Datastrukturer D. Föreläsning 2

Föreläsning 7. Träd och binära sökträd

Sökning och sortering

Föreläsning 13 Innehåll

Transkript:

Rekursion Rekursion är en grundläggande programmeringsteknik M h a rekursion kan vissa problem lösas på ett mycket elegant sätt Avsnitt 11 i kursboken: Att tänka rekursivt Att programmera rekursivt i Java Exempel Programmeringsmetodik -Java 254

En Rekursiv Listdefinition En lista är ett listelement följd av en lista, t ex nummer Nummerlista nummer komma Nummerlista Inklusive tomma listor [] Nummerlista nummer komma Nummerlista Nummerlista definieras m h a sig själv Programmeringsmetodik -Java 255

public class IntListNode { protected int myvalue; protected IntListNode next; public IntListNode(int value) { myvalue = value; next = null; }// IntListNode-constructor public IntListNode(int value, IntListNode nlist) { myvalue = value; next = nlist; }// IntListNode-constructor Programmeringsmetodik -Java 256

public IntListNode getnext() { return next; }// getnext public int getvalue() { return myvalue; }// getvalue }// class ListNode Programmeringsmetodik -Java 257

Rekursiva metoder En metod i Java får anropa sig själv En rekursiv metod måste hantera Basfallet Direkta eller indirekta rekursiva anrop Varje anrop exekveras i ett eget miljö med nya parametrar och lokala variabler Detta kallas för inkarnation av metoden När en inkarnation avslutas återges kontrollen till anroparen (som kan vara en inkarnation av samma metod) Programmeringsmetodik -Java 258

Några exempel Beräkna summan av alla tal mellan ett och N 1 Problemet kan definieras rekursivt: public int sum (int N) { } int result; // hjälpvariabel if (N == 1) // basfall result = 1; else result = N + sum (N-1); return result; Programmeringsmetodik -Java 259

Några exempel // Beräknar n-te fibonacci tal public int fibonacci (int n) { if (n <= 2) // basfall return 1; else return (fibonacci(n-1) + fibonacci(n-2)); } Programmeringsmetodik -Java 260

Några exempel MazeSearch [s. 472-476] 1110110001111 1011101111001 0000101010100 1110111010111 1010000111001 1011111101111 1000000000000 1111111111111 The maze was successfully traversed! 7770110001111 3077707771001 0000707070300 7770777070333 7070000773003 7077777703333 7000000000000 7777777777777 Programmeringsmetodik -Java 261

Direkt/Indirekt rekursion Direkt rekursion: Den rekursiva metoden anropar sig själv Indirekt rekursion En metod anropar en annan metod som resulterar i att den första metoden anropas Eftersom indirekt rekursion kan vara svår att följa bör man vara extra försiktig när man använder sig av det. Programmeringsmetodik -Java 262

Rekursion vs Iteration Alla problem går att lösa iterativt, t ex sum public int sum (int N) { int result = 0; // hjälpvariabel for (int i=1; i <= N; i++) result = result + i; return result; } Programmeringsmetodik -Java 263

Rekursion vs Iteration Rekursiva lösningar är lämpliga om Datat som hanteras har definierats rekursivt Problemet är rekursivt Rekursiva lösningar är oftast elegantare/enklare Iterativa lösningar är oftast effektivare Programmeringsmetodik -Java 264

KochSnowflake [s486-491] Programmeringsmetodik -Java 265

Array vs Vector Konstruktorer Synlighetsmodifierare Grafik this Objekt sortering Listor Repetiton mm Programmeringsmetodik -Java 266

En Allmän Objektsorterare Problem: Objekt kan inte sorteras med < Varje klass måste har en egen metod sort? Strider mot målet återanvändning! Idé: Skriv en allmän objektsorterare I java finns en sådan variant inbyggd se bl a klasserna Comparable & Collection Programmeringsmetodik -Java 267

En Allmän Objektsorterare Kraven läggs fast i ett Java interface: Två objekt kan jämföras interface Sortable{ // left<rigth? public boolean smaller (Object left); } Nu kan interfacet användas för att skriva en allmän objektsorterare public static void sort (Sortable[] items) Programmeringsmetodik -Java 268

Array/Fält Array vs Vektor Fast storlek sedan objektet skapats Vill man ha en ny storlek så får man skapa ett nytt objekt Vector Klass Fler metoder Dynamisk storlek Lägger man till ett element så utökar den storleken så att det ryms. Programmeringsmetodik -Java 269

En konstruktor : Konstruktorer För att initialisera nytt objekt Samma namn som klassen Returnerar inget värde, void anges inte Bra att alltid definiera en konstruktor Utom för Applet. Därför att man inte kan göra allt man skulle vilja göra i appletens konstruktor (t.ex. hämta appletens parametrar, komma åt ritytan, komma åt websidan appleten kom från m.m.) Programmeringsmetodik -Java 270

Synlighetsmodifierare 0RGLILHU Klasser och interface Metoder och variabler 'HIDXOWQRPRGLILHU Synlig i dess paket Ärvs av alla subklasser till klassen som finns i samma paket som klassen Tillgänglig från alla klasser i samma paket SXEOLF Synlig överallt Ärvs av alla subklasser till klassen Tillgänglig från alla klasser SURWHFWHG SULYDWH Ärvs av alla subklasser till klassen Tillgänglig från alla klasser i samma paket Ärvs inte av subklasser Inte tillgänglig i några andra klasser. Programmeringsmetodik -Java 271