Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afSofia Nørgaard Redigeret for ca. et år siden
1
Rekursion 2
2
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.2 Introduktion Vi har tidligere set eksempler på rekursive funktioner, herunder superTriangle og fibonacci-funktionen. Vi skal nu se nærmere på rekursion som en problem- løsningsteknik, og specielt skal vi se nærmere på skabe- lonen del, løs og kombinér som indfanger en stor klasse af rekursive algoritmer. Først skal vi imidlertid hjælpe en flok munke med deres livsopgave...
3
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.3 Verdens centrum 64 skiver skal flyttes fra A til C via B. En ad gangen og aldrig en større oven på en mindre. BAC
4
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.4 Simpelt tilfælde BACBAC
5
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.5 Hvad med to? BACBAC BACBAC
6
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.6 Og tre? BACBAC BACBAC A,C A,BC,B
7
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.7 Tre, fortsat BACBAC BACBAC B,A B,CA,C
8
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.8 Hvad med fem eller ti? BAC BAC
9
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.9 Den gode idé BACBAC BACBAC
10
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.10 Algoritmen Flyt (5, A, C): Flyt(4, A, B) Flyt(1, A, C) Flyt(4, B, C) 5,A,C 4,A,B4,B,C 1,A,C Flyt (N, A, C): Flyt(N-1, A, B) Flyt(1, A, C) Flyt(N-1, B, C) N,A,C N-1,A,BN-1,B,C 1,A,C
11
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.11 Og i Java void flyt(int n, int s, int d, int t) { // pre: n >= 1 // post: der er udskrevet hvordan man flytter // n skiver fra s til d via t // s: source, d: destination, t: temporary if ( n==1 ) { System.out.println(s + ” -> “ + d); } else { flyt(n-1, s, t, d); flyt(1, s, d, t, 0); flyt(n-1, t, d, s); }
12
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.12 Output for n=5 1 -> 3 1 -> 2 3 -> 2 1 -> 3 2 -> 1 2 -> 3 1 -> 3 1 -> 2 3 -> 2 3 -> 1 2 -> 1 3 -> 2 1 -> 3 1 -> 2 3 -> 2 2 -> 1 2 -> 3 1 -> 3 2 -> 1 3 -> 2 3 -> 1 2 -> 1 2 -> 3 1 -> 3 1 -> 2 3 -> 2 1 -> 3 2 -> 1 2 -> 3 1 -> 3
13
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.13 n # flytninger 1 1 2 3 3 7 4 15 5 31...... n ? Hvor mange flytninger?
14
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.14 Hvor meget printerpapir? 2 64 - 1 1,845 x 10 19 60 linier pr. kolonne 5 kolonner pr. side 2 sider pr. ark 2500 ark pr. kasse (25 x 40 x 40 cm 3 ) 50 kasser pr. m 2...
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.