Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.1 Rekursion.

Lignende præsentationer


Præsentationer af emnet: " Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.1 Rekursion."— Præsentationens transcript:

1  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.1 Rekursion

2  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.2  E ::= E op E | “(“ E “)” | Tal  op ::= “+” | “-” | “’” | “/”  Tal ::= “0” | “1” | “2” | “3” | “4”  | “5” | “6” | “7” | “8” | “9” Rekursion, syntaksbeskrivelse 3 + 7 * 9 E EEop EE * +TT 37 9

3  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.3 Rekursion, Java public void superTriangle(int d, int l) { // d >= 0 if ( d == 0 ) triangle(l); else { superTriangle(d-1, l/2); move(l/2); superTriangle(d-1, l/2); turn(120); move(l/2); turn(-120); superTriangle(d-1, l/2); turn(-120); move(l/2); turn(120); }

4  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.4 Mønster Termineringsregel: simpelt (evt. simple) tilfælde hvor rekursionen stopper Rekurrensregel: rekursin definition

5  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.5  E ::= E op E |  “(“ E “)” |  Tal Rekursion, syntaksbeskrivelse Rekurrensregler Termineringsregel

6  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.6 Rekursion, Java public void superTriangle(int d, int l) { // d >= 0 if ( d == 0 ) triangle(l); else { superTriangle(d-1, l/2); move(l/2); superTriangle(d-1, l/2); turn(120); move(l/2); turn(-120); superTriangle(d-1, l/2); turn(-120); move(l/2); turn(120); } Rekurrensregel Termineringsregel

7  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.7 Fibonacci-tal 1, 1, 2, 3, 5, 8, ? f 1 = 1 f 2 = 1 f n = f n-1 + f n-2 f 5 = f 4 + f 3 = (f 3 + f 2 ) + (f 2 + f 1 ) = ((f 2 + f 1 ) + f 2 ) + (f 2 + f 1 )

8  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.8 Fibonacci som Java-kode int fib (int n) { // pre: n >= 1 // post: fib(n) = f n (det n’te Fibonacci-tal) if ( n==1) return 1; else if ( n==2 ) return 1; else return fib(n-1) + fib(n-2); }

9  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.9 Introduktion Vi skal nu se nærmere på rekursion som en problem- løsningsteknik, og specielt skal vi senere i kurset se nærmere på skabelonen del, løs og kombinér som indfanger en stor klasse af rekursive algoritmer. Nu skal vi imidlertid hjælpe en flok munke med deres livsopgave...

10  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.10 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

11  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.11 Simpelt tilfælde BACBAC

12  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.12 Hvad med to? BACBAC BACBAC

13  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.13 Og tre? BACBAC BACBAC A,C A,BC,B

14  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.14 Tre, fortsat BACBAC BACBAC B,A B,CA,C

15  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.15 Hvad med fem eller ti? BAC BAC

16  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.16 Den gode idé BACBAC BACBAC

17  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.17 Algoritmen Flyt (5, A, C): Flyt(4, A, B) Flyt(1, A, C) Flyt(4, B, C) Flyt (N, A, C): Flyt(N-1, A, B) Flyt(1, A, C) Flyt(N-1, B, C) 5,A,C 4,A,B4,B,C 1,A,C N,A,C N-1,A,BN-1,B,C 1,A,C

18  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.18 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); flyt(1, s, d, 0); flyt(n-1, t, d); }

19  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.19 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

20  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.20 n # flytninger 1 1 2 3 3 7 4 15 5 31...... n ? Hvor mange flytninger?

21  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.21 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...


Download ppt " Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.1 Rekursion."

Lignende præsentationer


Annoncer fra Google