STACK FRAMES Stack Frames void Prog1( int q ) { int s; ... y - - PDF document

stack frames stack frames
SMART_READER_LITE
LIVE PREVIEW

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


slide-1
SLIDE 1

STACK FRAMES

slide-2
SLIDE 2
  • 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

slide-3
SLIDE 3
  • 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

slide-4
SLIDE 4
  • 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

slide-5
SLIDE 5
  • 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

slide-6
SLIDE 6
  • S. Prasitjutrakul 1994

Tower of Hanoi

slide-7
SLIDE 7
  • S. Prasitjutrakul 1994

Tower of Hanoi

slide-8
SLIDE 8
  • S. Prasitjutrakul 1994

Tower of Hanoi : Divide & Conquer

slide-9
SLIDE 9
  • 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

slide-10
SLIDE 10
  • 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 )