STACK FRAMES Stack Frames void Prog1( int q ) { int s; ... y - - PDF document
STACK FRAMES Stack Frames void Prog1( int q ) { int s; ... y - - PDF document
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
- S. Prasitjutrakul 1994
Stack Frames
void Prog1( int q ) { int s; ... Prog2( s, q ); ... } void Prog2( int a, int b ) { int x, y; .... } x b a y s q ret_addr2 ret_addr1 Prog2 Prog1
ret_addr2
- S. Prasitjutrakul 1994
Recursive Programs
t=? ... y = Fac( 3 ); ... int Fac( int x ) { int t; if ( x == 0 ) return( 1 ); else { t = Fac( x-1 ); return( x * t ); } }
ret_addr1 ret_addr2
ret_addr1 x=3
- S. Prasitjutrakul 1994
Recursive Programs
t=? ret_addr2 ret_addr1 t=? ret_addr2 t=? t=? ret_addr2 ret_addr1 t=? t=? ret_addr2 ret_addr1 t=? ret_addr2 t=? ret_addr2 t=? x=2 x=3 x=1 x=2 x=3 x=0 x=1 x=2 x=3
- S. Prasitjutrakul 1994
Recursive Programs
t=? ret_addr2 ret_addr1 t=1 t=2 ret_addr1 t=? ret_addr2 ret_addr1 t=? ret_addr2 t=1 x=1 x=2 x=3 x=2 x=3 x=3 1 2 6 1
- 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 ); }
4 3 2 1
nDisc = 4
- S. Prasitjutrakul 1994
Tower of Hanoi
0: Hanoi( 4, A, B, C ) 1: Hanoi( 3, A, C, B ) 2: Hanoi( 2, A, B, C ) 3: Hanoi( 1, A, C, B ) 4: Hanoi( 0, A, B, C ) 4: move 1 from A to C 4: Hanoi( 0, B, C, A ) 3: move 2 from A to B 3: Hanoi( 1, C, B, A ) 4: Hanoi( 0, C, A, B ) 4: move 1 from C to B 4: Hanoi( 0, A, B, C ) 2: move 3 from A to C 2: Hanoi( 2, B, C, A ) 3: Hanoi( 1, B, A, C ) 4: Hanoi( 0, B, C, A ) 4: move 1 from B to A 4: Hanoi( 0, C, A, B ) 3: move 2 from B to C 3: Hanoi( 1, A, C, B ) 4: Hanoi( 0, A, B, C ) 4: move 1 from A to C 4: Hanoi( 0, B, C, A ) 1: move 4 from A to B 1: Hanoi( 3, C, B, A ) 2: Hanoi( 2, C, A, B ) 3: Hanoi( 1, C, B, A ) 4: Hanoi( 0, C, A, B ) 4: move 1 from C to B 4: Hanoi( 0, A, B, C ) 3: move 2 from C to A 3: Hanoi( 1, B, A, C ) 4: Hanoi( 0, B, C, A ) 4: move 1 from B to A 4: Hanoi( 0, C, A, B ) 2: move 3 from C to B 2: Hanoi( 2, A, B, C ) 3: Hanoi( 1, A, C, B ) 4: Hanoi( 0, A, B, C ) 4: move 1 from A to C 4: Hanoi( 0, B, C, A ) 3: move 2 from A to B 3: Hanoi( 1, C, B, A ) 4: Hanoi( 0, C, A, B ) 4: move 1 from C to B 4: Hanoi( 0, A, B, C )