0% found this document useful (0 votes)
31 views

Data Structure and Algorithm: Recursion

The document describes the recursive Tower of Hanoi algorithm to move n disks from the source peg to the destination peg using an auxiliary peg by recursively moving n-1 disks, moving the remaining disk, and then recursively moving the n-1 disks from the auxiliary peg to the destination peg. Pseudocode is provided to implement the recursive TOH function.

Uploaded by

Mahomuda Akter
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views

Data Structure and Algorithm: Recursion

The document describes the recursive Tower of Hanoi algorithm to move n disks from the source peg to the destination peg using an auxiliary peg by recursively moving n-1 disks, moving the remaining disk, and then recursively moving the n-1 disks from the auxiliary peg to the destination peg. Pseudocode is provided to implement the recursive TOH function.

Uploaded by

Mahomuda Akter
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 38

Data Structure and Algorithm

Recursion

1
Tower of Hanoi
• Can move only one disk at a time
• Can not put bigger disk on smaller disk

2
Tower of Hanoi
• 1 Disks (Source: A, Destination: C)

A B C
3
Tower of Hanoi
• 1 Disks (Source: A, Destination: C)
– Move a disk from A to C

A B C
4
Tower of Hanoi
• 2 Disks (Source: A, Auxiliary: B, Destination: C)

A B C
5
Tower of Hanoi
• 2 Disks (Source: A, Auxiliary: B, Destination: C)
– Move a disk from A to B

A B C
6
Tower of Hanoi
• 2 Disks (Source: A, Auxiliary: B, Destination: C)
– Move a disk from A to B
– Move a disk from A to C

A B C
7
Tower of Hanoi
• 2 Disks (Source: A, Auxiliary: B, Destination: C)
– Move a disk from A to B
– Move a disk from A to C
– Move a disk from B to C

A B C
8
Tower of Hanoi
• 3 Disks

A B C
9
Tower of Hanoi
• 3 Disks
– Move 2 disks from A to B (Source: A, Auxiliary: C, Destination: B)

A B C
10
Tower of Hanoi
• 3 Disks
– Move 2 disks from A to B (Source: A, Auxiliary: C, Destination: B)
– Move a disk from A to C

A B C
11
Tower of Hanoi
• 3 Disks
– Move 2 disks from A to B (Source: A, Auxiliary: C, Destination: B)
– Move a disk from A to C
– Move 2 disks from B to C (Source: B, Auxiliary: A, Destination: C)

A B C
12
Tower of Hanoi
• n Disks (Recursive)
– Move n-1 disks from A to B (Source: A, Auxiliary: C, Destination: B)
– Move a disk from A to C
– Move n-1 disks from B to C (Source: B, Auxiliary: A, Destination: C)

A B C
13
• n Disks (Recursive)
– Move n-1 disks from A to B (Source: A, Auxiliary: C, Destination: B)
– Move a disk from A to C
– Move n-1 disks from B to C (Source: B, Auxiliary: A, Destination: C)

void TOH(int n, char A, char B, char C)


{
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}

14
• n Disks (Recursive)
– Move n-1 disks from A to B (Source: A, Auxiliary: C, Destination: B)
– Move a disk from A to C
– Move n-1 disks from B to C (Source: B, Auxiliary: A, Destination: C)

void TOH(int n, char A, char B, char C)


{
TOH(n-1, A, C, B);
printf(“MoveSourcea disk from %d to %d”, A, C);
Destination
TOH(n-1, B, A, C);
No of Disk
} Auxiliary

15
TOH( 3, ‘A’, ‘B’, ‘C’)

void TOH(int n, char A, char B, char C)


{
if(n==0)
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}

16
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘A’, ‘C’, ‘B’)


void TOH(int n, char A, char B, char C)
{
if(n==0)
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}

17
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘A’, ‘C’, ‘B’)


void TOH(int n, char A, char B, char C)
{
if(n==0)
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘A’, ‘B’, ‘C’)

18
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘A’, ‘C’, ‘B’)


void TOH(int n, char A, char B, char C)
{
if(n==0)
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘A’, ‘B’, ‘C’)

19
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘A’, ‘C’, ‘B’)


void TOH(int n, char A, char B, char C)
{
if(n==0)
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


A to C

20
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘A’, ‘C’, ‘B’)


void TOH(int n, char A, char B, char C)
{
if(n==0)
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘A’, ‘B’, ‘C’)

X
X
Move a disk from
A to C

21
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘A’, ‘C’, ‘B’)


void TOH(int n, char A, char B, char C)
{
if(n==0)
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X
Move a disk from
A to C

22
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘A’, ‘C’, ‘B’)


void TOH(int n, char A, char B, char C)
{
if(n==0)
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X
Move a disk from
A to C

23
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘A’, ‘C’, ‘B’)


void TOH(int n, char A, char B, char C)
{
if(n==0)
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X
Move a disk from
X
A to C

24
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘A’, ‘C’, ‘B’)


void TOH(int n, char A, char B, char C)
{
if(n==0)
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X
Move a disk from
X
A to C

Move a disk from


C to B

25
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘A’, ‘C’, ‘B’)


void TOH(int n, char A, char B, char C)
{
if(n==0)
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X
Move a disk from
X X
A to C

Move a disk from


C to B

26
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘A’, ‘C’, ‘B’)


void TOH(int n, char A, char B, char C)
{ Move a disk from
if(n==0) A to C
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X
Move a disk from
X X
A to C

Move a disk from


C to B

27
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘B’, ‘A’, ‘C’)


TOH( 2, ‘A’, ‘C’, ‘B’)
void TOH(int n, char A, char B, char C)
{ Move a disk from
if(n==0) A to C
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X
Move a disk from
X X
A to C

Move a disk from


C to B

28
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘B’, ‘A’, ‘C’)


TOH( 2, ‘A’, ‘C’, ‘B’)
void TOH(int n, char A, char B, char C)
{ Move a disk from
if(n==0) A to C
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X
Move a disk from
X X
A to C
TOH( 1, ‘B’, ‘C’, ‘A’)

Move a disk from


C to B

29
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘B’, ‘A’, ‘C’)


TOH( 2, ‘A’, ‘C’, ‘B’)
void TOH(int n, char A, char B, char C)
{ Move a disk from
if(n==0) A to C
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X
Move a disk from
X X
A to C
TOH( 1, ‘B’, ‘C’, ‘A’)

Move a disk from


C to B

X
30
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘B’, ‘A’, ‘C’)


TOH( 2, ‘A’, ‘C’, ‘B’)
void TOH(int n, char A, char B, char C)
{ Move a disk from
if(n==0) A to C
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X
Move a disk from
X X
A to C
TOH( 1, ‘B’, ‘C’, ‘A’)

Move a disk from


C to B

X
Move a disk from 31
B to A
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘B’, ‘A’, ‘C’)


TOH( 2, ‘A’, ‘C’, ‘B’)
void TOH(int n, char A, char B, char C)
{ Move a disk from
if(n==0) A to C
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X
Move a disk from
X X
A to C
TOH( 1, ‘B’, ‘C’, ‘A’)

Move a disk from


C to B
X
X
Move a disk from 32
B to A
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘B’, ‘A’, ‘C’)


TOH( 2, ‘A’, ‘C’, ‘B’)
void TOH(int n, char A, char B, char C)
{ Move a disk from
if(n==0) A to C
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X
Move a disk from
X X
A to C
TOH( 1, ‘B’, ‘C’, ‘A’)

Move a disk from


Move a disk from B to C
C to B
X
X
Move a disk from 33
B to A
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘B’, ‘A’, ‘C’)


TOH( 2, ‘A’, ‘C’, ‘B’)
void TOH(int n, char A, char B, char C)
{ Move a disk from
if(n==0) A to C
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X TOH( 1, ‘A’, ‘B’, ‘C’)
Move a disk from
X X
A to C
TOH( 1, ‘B’, ‘C’, ‘A’)

Move a disk from


Move a disk from B to C
C to B
X
X
Move a disk from 34
B to A
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘B’, ‘A’, ‘C’)


TOH( 2, ‘A’, ‘C’, ‘B’)
void TOH(int n, char A, char B, char C)
{ Move a disk from
if(n==0) A to C
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X TOH( 1, ‘A’, ‘B’, ‘C’)
Move a disk from
X X
A to C
X
TOH( 1, ‘B’, ‘C’, ‘A’)

Move a disk from


Move a disk from B to C
C to B
X
X
Move a disk from 35
B to A
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘B’, ‘A’, ‘C’)


TOH( 2, ‘A’, ‘C’, ‘B’)
void TOH(int n, char A, char B, char C)
{ Move a disk from
if(n==0) A to C
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X TOH( 1, ‘A’, ‘B’, ‘C’)
Move a disk from
X X
A to C
X
TOH( 1, ‘B’, ‘C’, ‘A’)

Move a disk from


Move a disk from B to C
C to B
X Move a disk from
A to C
X
Move a disk from 36
B to A
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘B’, ‘A’, ‘C’)


TOH( 2, ‘A’, ‘C’, ‘B’)
void TOH(int n, char A, char B, char C)
{ Move a disk from
if(n==0) A to C
return;
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


X A to B
X TOH( 1, ‘A’, ‘B’, ‘C’)
Move a disk from
X X
A to C
X
TOH( 1, ‘B’, ‘C’, ‘A’)
X
Move a disk from
Move a disk from B to C
C to B
X Move a disk from
A to C
X
Move a disk from 37
B to A
TOH( 3, ‘A’, ‘B’, ‘C’)

TOH( 2, ‘B’, ‘A’, ‘C’)


TOH( 2, ‘A’, ‘C’, ‘B’)
void TOH(int n, char A, char B, char C)
{ Move a disk from
if(n==0) A to C
return; 4
TOH(n-1, A, C, B);
printf(“Move a disk from %d to %d”,A,C);
TOH(n-1, B, A, C);
}
TOH( 1, ‘C’, ‘A’, ‘B’)
TOH( 1, ‘A’, ‘B’, ‘C’)

Move a disk from


A to B
2
Move a disk from
A to C TOH( 1, ‘B’, ‘C’, ‘A’)
TOH( 1, ‘A’, ‘B’, ‘C’)
1
Move a disk from
B to C
Move a disk from 6
C to B
3
3 Move a disk from
Move a disk from A to C
B to A
5 38 7

You might also like