Eksempel på eksamens powerpoint til 3 semesters Programmerings eksamen på Datamatiker Uddannelsen på UCN i Aalborg. Fra 2010, emne nr 3: Rekursion og rekursive algoritmer
4. Rekursive algoritmer
• Anvendes når et problem kan deles op i mindre
problemer af samme type:
– Del og hersk
• Del problemet: n/2
• Indtil: Base case
• Sammel løsningen
• Hale-rekursion – ingen samling af løsning
– Fibonacci
– Søgning
5. Kode eksempler
• Hale rekursion
– Det rekursive kald
afslutter metoden
F1 = 1, F2 = 1 &
Fn = Fn − 1 + Fn − 2
• Del og hersk
– Del løsningerne
samles og
returneres
11. Rekursion skaber overblik
• Hanoi 2^n
public void FlytTaarn(int n, string kilde, string maal, string hjlp)
{
if (n == 1)
{
//Flyt skive 1 fra kilde til mål
}
else
{
// FlytTaarn(n - 1, kilde, hjlp, maal)
//flyt skive n fra kilde til mål
//FlytTaarn(n - 1, hjlp, maal, kilde);
}
}
Notas do Editor
Algoritmer: en abstrakt beskrivelse af hvordan et problem af en bestem type kan løses
REKURSION: løser problemet ved at løse et mindre problem af samme type
Fordele: Korte simple implementering. Lette at forstå. Enklere end iterative impl
Ulemper: Det hele ligger i hukommelsen
En abstrakt utvetydig beskrivelse af hvordan et specifikt problem kan løses.
OPDAGES opfindes ikke
Sweep Pattern
Løkker med for, foreach eller while til gennemløb af collections og gøre noget
ved elementet fx tælle op på biler ældre end 10 år i en liste over biler
Search Pattern
Løkker med for, foreach eller while til gennemløb af collections og stoppe, når
man har fundet en bestemt bil, man søger
Merge patterns
Samle to sorteret collections til en sorteret collection ved at flytte cursoren i en
eller begge collections (hvis værdien er ens) af gangen
Rekursion anvendes ofte til at simplificere et uoverskueligt problem. Derfor bliver løsningen ofte dyr.
Rekursion anvendes ofte til at simplificere et uoverskueligt problem. Derfor bliver løsningen ofte dyr.
n er problemet størrelse
2^n = Hanoi, når løsningen af hvert del problem medføre n antal nye del problemer
Log2(n) = når problemet bliver halveret hver gang log2(n) = det tal 2 skal opløftes i for at give n
n^2 = loop nested i et loop
n*log2(n)
Mindre en dn
Der er mere end n sammenligninger,
n* x
n*(n/2^x)
Overblik
Ren kode – til forståelse
Eksponentiel vækst
2^n