0% found this document useful (0 votes)
42 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
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 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
We take content rights seriously. If you suspect this is your content, claim it here.
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