STACK FRAMES
Stack Frames void Prog1( int q ) { int s; ... y Prog2( s, q ); x ret_addr2 ... ret_addr2 Prog2 } b a void Prog2( int a, int b ) s { int x, y; ret_addr1 Prog1 q .... } S. Prasitjutrakul 1994
Recursive Programs ... y = Fac( 3 ); ret_addr1 ... int Fac( int x ) { int t; if ( x == 0 ) t=? return( 1 ); ret_addr1 else { t = Fac( x-1 ); x=3 return( x * t ); } ret_addr2 } S. Prasitjutrakul 1994
Recursive Programs t=? ret_addr2 x=0 t=? t=? ret_addr2 ret_addr2 x=1 x=1 t=? t=? t=? ret_addr2 ret_addr2 ret_addr2 x=2 x=2 x=2 t=? t=? t=? ret_addr1 ret_addr1 ret_addr1 x=3 x=3 x=3 S. Prasitjutrakul 1994
Recursive Programs 1 1 t=1 ret_addr2 x=1 t=? 2 t=1 ret_addr2 ret_addr2 x=2 x=2 t=? t=? t=2 6 ret_addr1 ret_addr1 ret_addr1 x=3 x=3 x=3 S. Prasitjutrakul 1994
Tower of Hanoi S. Prasitjutrakul 1994
Tower of Hanoi S. Prasitjutrakul 1994
Tower of Hanoi : Divide & Conquer S. Prasitjutrakul 1994
Tower of Hanoi : The Program void Hanoi( int nDisc char cFrom, char cTo, char cTemp ) { if ( nDisc == 0 ) return; Hanoi( nDisc-1, cFrom, cTemp, cTo ); printf( "Move disc #%d from %c to %c\n", nDisc, cFrom, cTo ); Hanoi( nDisc-1, cTemp, cTo, cFrom ); } 1 2 3 4 nDisc = 4 S. Prasitjutrakul 1994
Tower of Hanoi 1: move 4 from A to B 0: Hanoi( 4, A, B, C ) 1: Hanoi( 3, A, C, B ) 1: Hanoi( 3, C, B, A ) 2: Hanoi( 2, A, B, C ) 2: Hanoi( 2, C, A, B ) 3: Hanoi( 1, A, C, B ) 3: Hanoi( 1, C, B, A ) 4: Hanoi( 0, A, B, C ) 4: Hanoi( 0, C, A, B ) 4: move 1 from A to C 4: move 1 from C to B 4: Hanoi( 0, B, C, A ) 4: Hanoi( 0, A, B, C ) 3: move 2 from C to A 3: move 2 from A to B 3: Hanoi( 1, C, B, A ) 3: Hanoi( 1, B, A, C ) 4: Hanoi( 0, C, A, B ) 4: Hanoi( 0, B, C, A ) 4: move 1 from C to B 4: move 1 from B to A 4: Hanoi( 0, A, B, C ) 4: Hanoi( 0, C, A, B ) 2: move 3 from A to C 2: move 3 from C to B 2: Hanoi( 2, B, C, A ) 2: Hanoi( 2, A, B, C ) 3: Hanoi( 1, B, A, C ) 3: Hanoi( 1, A, C, B ) 4: Hanoi( 0, B, C, A ) 4: Hanoi( 0, A, B, C ) 4: move 1 from B to A 4: move 1 from A to C 4: Hanoi( 0, C, A, B ) 4: Hanoi( 0, B, C, A ) 3: move 2 from B to C 3: move 2 from A to B 3: Hanoi( 1, A, C, B ) 3: Hanoi( 1, C, B, A ) 4: Hanoi( 0, A, B, C ) 4: Hanoi( 0, C, A, B ) 4: move 1 from A to C 4: move 1 from C to B 4: Hanoi( 0, B, C, A ) 4: Hanoi( 0, A, B, C ) S. Prasitjutrakul 1994
Recommend
More recommend