Specialeforsvar: Fundamentet for et fleksibelt container bibliotek
|
|
|
- Sandra Hald
- 9 år siden
- Visninger:
Transkript
1 Specialeforsvar: Fundamentet for et fleksibelt container bibliotek Foundations of an adaptable container library Bo Simonsen Datalogisk Institut, Københavns Universitet Denne præsentation, afhandlingen, samt errata kan hentes på c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (1)
2 Overblik Specialet omhandler arkitekturen og designet af CPH STL, samt løsninger af problemer i forbindelse med brug af CPH STL. STL er et generisk program bibliotek for C++ der tilbyder algoritmiske byggeklodser. STL tilbyder en implementation af en data struktur for hver container. CPH STL er en udvidet udgave af STL der tilbyder forskellige implementationer af data strukturer med forskellige karakteriska blandt andet: ydelse, plads effektivitet og sikkerhed. Specialet består af tre artikler, hvoraf to af dem er skrevet sammen med Jyrki Katajainen. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (2)
3 STL Generiske algorithmer sort, find,.. Iteratorer Containers set, list, vector, deque.. En container er en class template der kan opdateres dynamisk ved hjælp af de funktioner der stilles tilrådighed af containeren. En generisk algoritme er en function template der udfører operationer på en container eller en sekvens. En iterator er en type der gør det muligt for de generiske algoritmer at tilgå de data der er gemt i en container. Ordning og hukommelses allokering er afkoblet og placeret i henholdsvis en comparator og allocator. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (3)
4 Arkitekturen i CPH STL Decoratorer Dekorations lag cphstl::filter view cphstl::filter iterator Container grænseflader Iteratorer Abstraktions lag leda::dictionary Standard kompatibel map Fleksibelt map cphstl::node iterator Realizatorer Search-tree framework red-black tree Balancers Implementations lag AVL tree red-black tree 1. generation Encapsulatorer 2. generation AVL node bit-packed AVL node red-black tree node bit-packed RBT node 3. generation c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (4)
5 Case study: vector En vector kan indeholde en sekvens af elementer der kan tilgås via iteratorer eller indices i konstant tid. Jvf. C++ standarden er den eneste mulige implementation et dynamisk array da elemeterne skal opbevares i et sammenhængende hukommelses segment. alloker og kopier alloker og kopier v 1 v 1 v 2 v 1 v 2 v 3 v 4 Vores implementationer er ikke altid standard kompatible. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (5)
6 Problemer og mulige udvidelser Referentiel Integritet: Uønsket adfærd i nogle tilfælde: insert(++begin(), v 2 ) v 1 v 3 v 1 v 2 v 3 Stærk undtagelses sikkerhed: Uønsket adfærd i nogle tilfælde: insert(++begin(), v 2 ) v 1 v 3 v 1 v 3 Copy constructoren for værdien kaster en exception. Rollback ikke muligt.? Pladseffektivitet og værstefalds tidskompleksitet. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (6)
7 Vector framework Framework Faktoriserer container operationer. Kernel Håndterer hukommelses segmenter. Tilbyder grow, shrink og access. Surrogate pointer i Encapsulator Indkapsler en værdi i et lille objekt. Dette objekt kan enten være allokeret eller gemt direkte i kernen. v i Surrogate Tilbyder en proxy for kernen der sikre at swap ikke invaliderer iteratorer. Iterator c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (7)
8 Encapsulatorer Elementer opbevaret direkte direct encapsulator v Elementer opbevaret indirekte indirect encapsulator Elementer opbevaret dobbelt indirekte doubly indirect encapsulator Surrogate i Surrogate i Surrogate i v i Encapsulator i Encapsulator i Iterator v Iterator Iterator - Stærk undtagelses sikkerhed - Referentiel Integritet (+) Stærk undtagelses sikkerhed + Referentiel Integritet + Stærk undtagelses sikkerhed + Referentiel Integritet c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (8)
9 Kerner Alle kerner: indsættelse samt sletning i fronten og midten i O(n) værstefalds tid (n = # elementer). Dynamisk array: push_back og pop_back i amortiseret O(1) tid. Plads forbrug 6n+O(1). Hashed array tree: push_back og pop_back i amortiseret O(1) tid. Plads forbrug n + O( n). Levelwise-allocated pile: push_back og pop_back i O(1) værstefalds tid. Plads forbrug 2n + O(lg n) c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (9)
10 Hvorfor component framework? Fleksibilitet: vector value type int float bool vector framework kernel encapsulator iterator dynamic array direct encapsulator rank iterator hashed array tree indirect encapsulator proxy iterator Vedligeholdelse: En container er sammensat af genbrugelige komponenter, dette giver os en høj grad af kode genbrug. Fair benchmarking: Idéelt vil målingsresultaterne afspejle effektiviteten af data strukturene og ikke programmørenes dygtighed. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (10)
11 Effektivitet Execution time per operation [in nanoseconds] push_back for integer data push back: For i [0, n): v.push back(i) dynamic array, doubly indirect encapsulation levelwise allocated pile, indirect encapsulation hashed array tree, indirect encapsulation dynamic array, indirect encapsulation levelwise allocated pile, direct encapsulation dynamic array, direct encapsulation hashed array tree, direct encapsulation std::vector Number of operations n c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (11)
12 Fleksibilitet (Adaptability) template argumenter politikker component framework Er C++ kraftigt nok fra brugerens synspunkt? en brugertilpasset komponent c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (12)
13 Problemer med container deklarationer typedef cphstl::set<int, std::less<int>, std::allocator<int>, cphstl::tree<int, int, cphstl::unnamed::identity<int>, std::less<int>, std::allocator<int>, cphstl::avl_tree_node<int, true>, cphstl::avl_tree_balancer< cphstl::avl_tree_node<int, true> > >, cphstl::node_iterator< cphstl::avl_tree_node<int, true>, false>, cphstl::node_iterator< cphstl::avl_tree_node<int, true>, true> > C; Problemer med typiske deklarationer af containers: Størrelse, læsbarhed, og forståelse. Opstår ved: Det samme template argument gives flere gange, det enkelte template arguments betydning er ikke klart, og default argumenters betydning forsvinder ved overstyring. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (13)
14 Løsningerne Prædefinerede container klasser, vh.a. templates): nedarvning (eller typedef cphstl::vector cphstl::fast vector cphstl::compact vector cphstl::safe vector Named template arguments: typedef cphstl::set!<v=int, R=cphstl::tree!< N=cphstl::avl_tree_node!<packed=true!>, B=cphstl::avl_tree_balancer!>, J=cphstl::node_iterator!<is_const=true!>, I=cphstl::node_iterator!<is_const=false!>!> C; Template argumenter er globale. For manglende template argumenter benyttes default argumenter. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (14)
15 Et problem mere: Component mismatch Et scenarie: Encapsulator gives som kernel vector value type int float bool vector framework kernel encapsulator iterator dynamic array direct encapsulator rank iterator hashed array tree indirect encapsulator proxy iterator proxy iterator kan kun bruges for indirect encapsulator og doubly indirect encapsulator Ovenstående konfiguration giver mange ulæselige fejlmeddelser! c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (15)
16 Løsningerne Prædefinerede relationer: Component families, static assertions ved associative typer. Autogenerede relationer: C++0x concepts (generelt constraint polymorphism), BOOST Concept checking library. C++0x concepts auto concept LessThanComparable < typename T> { bool operator<(t, T); } template <LessThanComparable T> void min(t const& v1, T const& v2); Component families namespace cphstl { NEW_ENCAPSULATOR_FAMILY(proxy) JOIN_ENCAPSULATOR_FAMILY(proxy, doubly_indirect_encapsulator) JOIN_ENCAPSULATOR_FAMILY(proxy, indirect_encapsulator) } IS_ENCAPSULATOR_IN_FAMILY( indirect_encapsulator, proxy) c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (16)
17 C++0x (C++1x) Language feature C++ C++0x Friend templates Type inference Constraint polymorphism Partial specialization of member function Compile-time reflection Named template arguments Typedef templates Generic encapsulators Inheriting constructors Circular template arguments Static assertions c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (17)
18 Konklusion Vores arkitektur tilbyder den nødvendige fleksibilitet for realisering af vores ønskede design samt den introducere blot et begrænset performance overhead (i de fleste tilfælde intet). Prisen for stærkere garantier for vector er meget dyr i det cache misses og hukommelses allokeringer er dyre. Elementerne i C++0x giver bedre værktøjer for biblioteks udvikling generelt. C++/C++0x er ikke stærkt nok til at konstruere et fleksibelt program bibliotek med ønsket brugervenlighed. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (18)
Abstrakte datatyper C#-version
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype
Programmering i C. Lektion 4. 5. december 2008
Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )
A Profile for Safety Critical Java
A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren
Online kursus: C++ Programming
Online kursus 365 dage DKK 6.999 Nr. 90201 P ekskl. moms Kom hele vejen rundt om C++ og få en dyb forståelse for det multiparadigmatiske programmeringssprog, der er standardiseret af både International
Algorithms & Architectures II
Algorithms & Architectures II Algorithms & Architectures II Jens Myrup Pedersen Hans Peter Schwefel Kursusholdere Dagens lektion Overordnet mål: At etablere en forståelse for hvordan hardware og hardwarearkitekturer
17 Søgning og Søgetræer.
17 Søgning og Søgetræer. Lineær og inær søgning i lister. inære søgetræer. Søgning efter knude i træ. Indsættelse af knude i træ. Søgning i og sortering af inært søgetræ. Sletning af knude i inært søgetræ.
Skriftlig eksamen i Datalogi
Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2
University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3
DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget
Ugeseddel 4 1. marts - 8. marts
Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:
Sortering Sortering Input: Output: n tal De n tal i sorteret orden Eksempel: Kommentarer: 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Sorteret orden kan være stigende eller faldende. Vi vil i dette kursus
DATALOGI 0GB. Skriftlig eksamen tirsdag den 6. januar 2004
Københavns Universitet bacheloruddannelsen i datalogi side 1 af 6 DATALOGI 0GB Skriftlig eksamen tirsdag den 6. januar 2004 Dette opgavesæt består af 6 nummererede sider. Eksamensdeltagerne bør straks
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Sortering. Eksempel: De n tal i sorteret orden
Sortering 1 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden
Skriftlig Eksamen Algoritmer og Datastrukturer (dads)
Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Datalogisk Institut Aarhus Universitet Tirsdag den 27. maj 2003, kl. 9.00 3.00 Opgave (25%) For konstanten π = 3.4592... gælder identiteten π 2 6 =
DM502. Peter Schneider-Kamp ([email protected]) http://imada.sdu.dk/~petersk/dm502/
DM502 Peter Schneider-Kamp ([email protected]) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!
Sortering. Eksempel: De n tal i sorteret orden
Sortering 1 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden
Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer
Introduktion til datastrukturer Introduktion til datastrukturer Philip Bille Datastrukturer Datastruktur. Metode til at organise data så det kan søges i/tilgås/manipuleres effektivt. Mål. Hurtig Kompakt
Systemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111
DM14 1. Obligatoriske opgave Systemkald Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 Side 1 af 5 Intro: Formålet med opgaven at et lave en system kald
Projekt arbejde til kurset Advanced Models and Programs, SASP-AMP 2008 Poul Brønnum, IT Universitetet i København, Maj 2008. Indholdsfortegnelse
Udvidelse af MicroC compileren til at kunne håndtere struct- og union typer samt switch-, break- og continue statement. Yderligere er ovenstående konstruktioner anvendt til at indføre malloc og free kald
Speciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP)
Speciale Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP) Speciale efterår 2005 Teknisk Informationsteknologi Jan Lauritzen & Mads
Singleton pattern i Java
Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.
High-Performance Data Mining med SAS Enterprise Miner 14.1
High-Performance Data Mining med SAS Enterprise Miner 14.1 nye procedurer til en mere effektiv modeludviklingsproces Kristina Birch, Advisory Analytical Consultant, SAS Institute Indhold Hvad er High-Performance
Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer
Introduktion til datastrukturer Introduktion til datastrukturer Philip Bille Datastrukturer Datastruktur. Metode til at organise data så det kan søges i/tilgås/manipuleres effektivt. Mål. Hurtig Kompakt
Sådan kommer du nemt i gang med Joomla!
Joomla! Kursus Sådan kommer du nemt i gang med Joomla! Hvorfor er Joomla! alt for svær at komme i gang med I mit daglige virke som konsulent og underviser, med speciale i Joomla!, får jeg tit at vide at
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til [email protected]. Besvarelsen skal
19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.
19 Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse. Sammenligning af hashtabeller og søgetræer. 281 Hashing-problemet (1). Vi ønsker at afbilde n objekter på en tabel
METODER ARV KLASSER. Grundlæggende programmering Lektion 5
METODER KLASSER ARV Grundlæggende programmering Lektion 5 1 METODER Sekvenser af kode om samme emne 2 REPETITION Række af statements der udfører en handling Mindst én metode der hedder main Forskellen
EA3 eller EA Cube rammeværktøjet fremstilles visuelt som en 3-dimensionel terning:
Introduktion til EA3 Mit navn er Marc de Oliveira. Jeg er systemanalytiker og datalog fra Københavns Universitet og denne artikel hører til min artikelserie, Forsimpling (som også er et podcast), hvor
MapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni 2011. 1 8 jun 2011 MapBasic &.
MapBasic &.NET interaktion MapBasic.NET Jakob Lanstorp IT konsulent COWI Odense 23. Juni 2011 1 MapBasic &.NET interaktion Erfaring med MapBasic.NET / Visual Studio Anden programmering 2 Program Hurtig
Danmarks Tekniske Universitet
side af sider Danmarks Tekniske Universitet Skriftlig prøve, den. maj 00. Kursusnavn Algoritmer og datastrukturer Kursus nr. 06. Tilladte hjælpemidler: Alle hjælpemidler. Vægtning af opgaverne: Opgave
Skriftlig Eksamen DM507 Algoritmer og Datastrukturer
Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Institut for Matematik og Datalogi Syddansk Universitet, Odense Mandag den 6. juni 2016, kl. 15:00 19:00 Besvarelsen skal afleveres elektronisk. Se
Design by Contract. Design and Programming by Contract. Oversigt. Prædikater
Design by Contract Design and Programming by Contract Anne Haxthausen [email protected] Informatics and Mathematical Modelling Technical University of Denmark Design by Contract er en teknik til at specificere
Asymptotisk analyse af algoritmers køretider
Asymptotisk analyse af algoritmers køretider Analyse af køretid Recall: Vi ønsker at vurdere (analysere) algoritmer på forhånd inden vi bruger lang tid på at implementere dem. De to primære spørgsmål:
Skriftlig Eksamen Algoritmer og Datastrukturer (dads)
Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Datalogisk Institut Aarhus Universitet Mandag den 27. maj 2002, kl. 9.00 13.00 Opgave 1 (25%) Denne opgave handler om multiplikation af positive heltal.
Programmering og Problemløsning, 2017
Programmering og Problemløsning, 2017 Programmering med Lister og Arrays Martin Elsman Department of Computer Science University of Copenhagen DIKU October 3, 2017 Martin Elsman (DIKU) Programmering og
Videregående Programmering for Diplom-E Noter
Videregående Programmering for Diplom-E Noter 1. Uddelegering Ét af de væsentlige principper i objektorienteret programmering er, at enhver klasse selv skal kunne "klare ærterne". Enhver klasse skal altså
Programmering og Problemløsning, 2017
Programmering og Problemløsning, 2017 Typer og Mønstergenkendelse Martin Elsman Datalogisk Institut Københavns Universitet DIKU 23. Oktober, 2017 Martin Elsman (DIKU) Programmering og Problemløsning, 2017
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 20. april, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
STS Designdokument. STS Designdokument
STS Designdokument i STS Designdokument STS Designdokument ii REVISION HISTORY NUMBER DATE DESCRIPTION NAME 0.3 2013-01 N STS Designdokument iii Indhold 1 Introduktion 1 2 Arkitekturoverblik 1 2.1 Eksterne
28 Algoritmedesign. Noter. PS1 -- Algoritmedesign
28 Algoritmedesign. Algoritmeskabelon for Del og Hersk. Eksempler på Del og Hersk algoritmer. Binær søgning i et ordnet array. Sortering ved fletning og Quicksort. Maksimal delsums problem. Tætteste par
1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer
1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer på disse. Typer af lister: Array Enkelt linket liste Dobbelt linket Cirkulære lister Typer af køer: FILO FIFO
The ADSL-optimizer: Korrekt trafikstyring på ADSL linier
The ADSL-optimizer: Korrekt trafikstyring på ADSL linier Trafikstyring i bolignet d.8/6-2005 Foredrag: Baseret på mit datalogi speciale af Jesper Dangaard Brouer Cand. Scient Datalog Datalogisk
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api
Specifikation Abstrakt, objektorienteret operativsystem-api Indhold 1 Indledning... 3 1.1 Introduktion... 3 1.2 Formål... 3 1.3 Overordnede krav... 3 2 Ressourcer i OS-API et... 4 2.1 Tråde... 4 2.2 Timere...
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2017 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 6. april, 2017 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Introduktion til design patterns.
Introduktion til design patterns. Genbrug. Pattern languges i arkitektur. Standardbeskrivelse af design patterns. Oversigt over design patterns. Observer. Composite. Decorator. Abstract Factory. Patterns
4 Basal Objekt-orienteret Programmering I.
4 Basal Objekt-orienteret Programmering I. Klasser i forhold til abstrakte datatyper og record-typer. Variable og operationer. Klasse-interfaces. Klasser og typer. Klasse-instantiering og initialisering.
Rekursion og dynamisk programmering
Rekursion og dynamisk programmering Datastrukturer & Algoritmer, Dat C Forelæsning 12/10-2004 Henning Christiansen Rekursion: at en procedure kalder sig selv eller et antal metoder kalder hinanden gensidigt.
