Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 3

Name: Saria Mahmood

Class: BSCS(3-B)

Enrollment: 03-134202-077

RECURSIVE ALGORITHM:

start

function HanoiTower(diskNumber, start_rod,mid_rod,end_rod)

if diskNumber=1

move disk from start_rod to mid_rod

else

HanoiTower (diskNumber-1,start_rod,mid_rod,end_rod)

move diskNumber from start rod to end rod

HanoiTower(diskNumber - 1, start_rod, mid_rod, end_rod)

end if

end function

stop

TRACE OF RECURSIVE ALGORITHM (n=4) :

start

function HanoiTower(diskNumber, start_rod,mid_rod,end_rod)

if diskNumber=1

move disk from start_rod to mid_rod

else

HanoiTower (diskNumber-1,start_rod,mid_rod,end_rod)

move diskNumber from start rod to end rod

HanoiTower(diskNumber - 1, start_rod, mid_rod, end_rod)

end if

end function

stop
Move disk 1 from Start rod to Mid rod

Move disk 2 from Start rod to End rod

Move disk 1 from Mid rod to End rod

Move disk 3 from Start rod to Mid rod

Move disk 1 from End rod to Start rod

Move disk 2 from End rod to Mid rod

Move disk 1 from Start rod to Mid rod

Move disk 4 from Start rod to End rod

Move disk 1 from Mid rod to End rod

Move disk 2 from Mid rod to Start rod

Move disk 1 from End rod to Start rod

Move disk 3 from Mid rod to End rod

Move disk 1 from Start rod to Mid rod

Move disk 2 from Start rod to End rod

Move disk 1 from Mid rod to End rod


WHY RECURSION:

Recursion is more efficient approach to solve such problems. A function is modified with new arguments
without any technicality and difficulty. One does not need to create a new function for every updated
information. Recursion is easy to use and more reliable approach to solve hanomi tower problem.

CODE:
#include <iostream>
#include <string>
using namespace std;

void TowerOfHanoi(int n, string from_tower, string to_tower, string aux_tower)


{
if (n == 1)
{
cout << "Move disk 1 from rod " << from_tower << " to rod " << to_tower <<
endl;
return;
}
TowerOfHanoi(n - 1, from_tower, aux_tower, to_tower);
cout << "Move disk " << n << " from rod " << from_tower << " to rod " << to_tower
<< endl;
TowerOfHanoi(n - 1, aux_tower, to_tower, from_tower);
}

int main()
{
int n = 3; // Number of disks
TowerOfHanoi(n, "Start", "End", "Mid"); //names of the towers
system("pause");
return 0;
}
OUTPUT:

You might also like