You are on page 1of 8

10/21/2019 Program for Tower of Hanoi - GeeksforGeeks

Custom Search COURSES Login

HIRE WITH US

Design a stack with



operations on middle
element

How to e ciently
implement k stacks in
a single array?

Iterative Tower of
Hanoi

Program for Tower of


Hanoi

Count the triplets


such that A[i] < B[j] <
C[k]

Complexity Analysis
of Binary Search

Maximum Sum
SubArray using Divide
and Conquer | Set 2

Find minimum steps


required to reach the
end of a matrix | Set -
1

Sum of maximum of
all subarrays | Divide
and Conquer

Kth smallest element


in the array using
constant space when
array can't be
modi ed

Find minimum steps


required to reach the
end of a matrix | Set 2

Cost Based Tower of


Hanoi

Cartesian tree from


inorder traversal |
Segment Tree

Find the number of


different numbers in
https://www.geeksforgeeks.org/c-program-for-tower-of-hanoi/ 1/8
10/21/2019 Program for Tower of Hanoi - GeeksforGeeks

the array after


applying the given
operation q times

Modular
Exponentiation of
Complex Numbers

Find an N x N grid
whose xor of every
row and column is
equal

Signi cant Inversions


in an Array

Program for Tower of Hanoi


Tower of Hanoi is a mathematical puzzle where we have three rods and n disks. The objective of the puzzle is to move the entire
stack to another rod, obeying the following simple rules:
1) Only one disk can be moved at a time.
2) Each move consists of taking the upper disk from one of the stacks and placing it on top of another stack i.e. a disk can only be
moved if it is the uppermost disk on a stack.
3) No disk may be placed on top of a smaller disk.

https://www.geeksforgeeks.org/c-program-for-tower-of-hanoi/ 2/8
10/21/2019 Program for Tower of Hanoi - GeeksforGeeks

Approach :

Take an example for 2 disks :


Let rod 1 = 'A', rod 2 = 'B', rod 3 = 'C'.

Step 1 : Shift first disk from 'A' to 'B'.


Step 2 : Shift second disk from 'A' to 'C'.
Step 3 : Shift first disk from 'B' to 'C'.

The pattern here is :


Shift 'n-1' disks from 'A' to 'B'.
Shift last disk from 'A' to 'C'.
Shift 'n-1' disks from 'B' to 'C'.

Image illustration for 3 disks :

Examples:

Input : 2
Output : Disk 1 moved from A to B
Disk 2 moved from A to C
Disk 1 moved from B to C

Input : 3
Output : Disk 1 moved from A to C
Disk 2 moved from A to B
Disk 1 moved from C to B
Disk 3 moved from A to C
Disk 1 moved from B to A
Disk 2 moved from B to C
Disk 1 moved from A to C

Recommended: Please solve it on “PRACTICE ” rst, before moving on to the solution.

C++

// C++ recursive function to ▲


// solve tower of hanoi puzzle
 #include <bits/stdc++.h>
using namespace std;
https://www.geeksforgeeks.org/c-program-for-tower-of-hanoi/ 3/8
10/21/2019 Program for Tower of Hanoi - GeeksforGeeks

 void towerOfHanoi(int n, char from_rod,


char to_rod, char aux_rod)
 {
if (n == 1)
{
cout << "Move disk 1 from rod " << from_rod <<
" to rod " << to_rod<<endl;
return;
}
towerOfHanoi(n - 1, from_rod, aux_rod, to_rod);
cout << "Move disk " << n << " from rod " << from_rod <<
" to rod " << to_rod << endl;
towerOfHanoi(n - 1, aux_rod, to_rod, from_rod);
}

// Driver code
int main()
{
int n = 4; // Number of disks
towerOfHanoi(n, 'A', 'C', 'B'); // A, B and C are names of rods
return 0;
}

// This is code is contributed by rathbhupendra

C

#include <stdio.h>

 // C recursive function to solve tower of hanoi puzzle


void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod)
 {
if (n == 1)
 {
printf("\n Move disk 1 from rod %c to rod %c", from_rod, to_rod);
return;
}
towerOfHanoi(n-1, from_rod, aux_rod, to_rod);
printf("\n Move disk %d from rod %c to rod %c", n, from_rod, to_rod);
towerOfHanoi(n-1, aux_rod, to_rod, from_rod);
}

int main()
{
int n = 4; // Number of disks
towerOfHanoi(n, 'A', 'C', 'B'); // A, B and C are names of rods
return 0;
}

Java

// Java recursive program to solve tower of hanoi puzzle

 class GFG
{
 // Java recursive function to solve tower of hanoi puzzle
static void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod)
 {
if (n == 1)
{
System.out.println("Move disk 1 from rod " + from_rod + " to rod " + to_rod);
return;
}
towerOfHanoi(n-1, from_rod, aux_rod, to_rod);
System.out.println("Move disk " + n + " from rod " + from_rod + " to rod " + to_rod);
towerOfHanoi(n-1, aux_rod, to_rod, from_rod);
}

// Driver method
public static void main(String args[])
{
int n = 4; // Number of disks
towerOfHanoi(n, 'A', 'C', 'B'); // A, B and C are names of rods
}
} ▲

https://www.geeksforgeeks.org/c-program-for-tower-of-hanoi/ 4/8
10/21/2019 Program for Tower of Hanoi - GeeksforGeeks

Python

# Recursive Python function to solve tower of hanoi

 def TowerOfHanoi(n , from_rod, to_rod, aux_rod):


if n == 1:
 print "Move disk 1 from rod",from_rod,"to rod",to_rod
return
 TowerOfHanoi(n-1, from_rod, aux_rod, to_rod)
print "Move disk",n,"from rod",from_rod,"to rod",to_rod
TowerOfHanoi(n-1, aux_rod, to_rod, from_rod)

# Driver code
n = 4
TowerOfHanoi(n, 'A', 'C', 'B')
# A, C, B are the name of rods

# Contributed By Harshit Agrawal

C#

// C# recursive program to solve


// tower of hanoi puzzle
 using System;

 class geek
{

// C# recursive function to solve
// tower of hanoi puzzle
static void towerOfHanoi(int n, char from_rod,
char to_rod, char aux_rod)
{
if (n == 1)
{
Console.WriteLine("Move disk 1 from rod " + from_rod
+ " to rod " + to_rod);
return;
}
towerOfHanoi(n-1, from_rod, aux_rod, to_rod);
Console.WriteLine("Move disk " + n + " from rod "
+ from_rod + " to rod " + to_rod);
towerOfHanoi(n-1, aux_rod, to_rod, from_rod);
}

// Driver method
public static void Main()
{
// Number of disks
int n = 4;

// A, B and C are names of rods


towerOfHanoi(n, 'A', 'C', 'B');
}
}

// This code is contributed by Sam007

PHP

<?php
//PHP code to solve Tower of Hanoi problem.

// Recursive Function to solve Tower of Hanoi
 function towerOfHanoi($n, $from_rod, $to_rod, $aux_rod) {

 if ($n === 1) {
echo ("Move disk 1 from rod $from_rod to rod $to_rod \n");
return;
}

towerOfHanoi($n-1, $from_rod, $aux_rod, $to_rod);


echo ("Move disk $n from rod $from_rod to rod $to_rod \n");
towerOfHanoi($n-1, $aux_rod, $to_rod, $from_rod);

https://www.geeksforgeeks.org/c-program-for-tower-of-hanoi/ 5/8
10/21/2019 Program for Tower of Hanoi - GeeksforGeeks

// Driver code

// number of disks
$n = 4;

// A, B and C are names of rods


towerOfHanoi($n, 'A', 'C', 'B');

// This code is contributed by akash7981


?>

Output:

Move disk 1 from rod A to rod B


Move disk 2 from rod A to rod C
Move disk 1 from rod B to rod C
Move disk 3 from rod A to rod B
Move disk 1 from rod C to rod A
Move disk 2 from rod C to rod B
Move disk 1 from rod A to rod B
Move disk 4 from rod A to rod C
Move disk 1 from rod B to rod C
Move disk 2 from rod B to rod A
Move disk 1 from rod C to rod A
Move disk 3 from rod B to rod C
Move disk 1 from rod A to rod B
Move disk 2 from rod A to rod C
Move disk 1 from rod B to rod C

For n disks, total 2n – 1 moves are required.

eg: For 4 disks 24 – 1 = 15 moves are required.

For n disks, total 2n-1 function calls are made.

eg: For 4 disks 24-1 = 8 function calls are made.


Related Articles

Recursive Functions
Iterative solution to TOH puzzle
Quiz on Recursion

Tower of Hanoi | GeeksforGeeks

References:

http://en.wikipedia.org/wiki/Tower_of_Hanoi

https://www.geeksforgeeks.org/c-program-for-tower-of-hanoi/ 6/8
10/21/2019 Program for Tower of Hanoi - GeeksforGeeks

This article is contributed by Rohit Thapliyal. If you like GeeksforGeeks and would like to contribute, you can also write an article
using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the
GeeksforGeeks main page and help other Geeks.

Please write comments if you nd anything incorrect, or you want to share more information about the topic discussed above.

Recommended Posts:
Iterative Tower of Hanoi
Cost Based Tower of Hanoi
Program for sum of cos(x) series
Program to print Hut
Program for n-th even number
Program for n-th odd number
Program to calculate value of nCr
C Program to Add two Integers
Program to nd sum of 1 + x/2! + x^2/3! +...+x^n/(n+1)!
Program for EMI Calculator
Program to calculate age
Program to wish Women's Day
Program for Circumference of a Parallelogram
Program to print the Sum of series -1 + 2 + 11 + 26 + 47 +.....
Program to nd the sum of a Series 1/1! + 2/2! + 3/3! + 4/4! +.......+ n/n!

Improved By : vaibhav29498, Rustam Ali, NipunPruthi, rathbhupendra


Article Tags : Divide and Conquer School Programming Stack

https://www.geeksforgeeks.org/c-program-for-tower-of-hanoi/ 7/8
10/21/2019 Program for Tower of Hanoi - GeeksforGeeks

Practice Tags : Divide and Conquer Stack


31

3.1
To-do Done
Based on 61 vote(s)

Feedback/ Suggest Improvement Add Notes Improve Article

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.

Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.

Load Comments

5th Floor, A-118,


Sector-136, Noida, Uttar Pradesh - 201305
feedback@geeksforgeeks.org

COMPANY LEARN PRACTICE CONTRIBUTE


About Us Algorithms Courses Write an Article
Careers Data Structures Company-wise Write Interview Experience
Privacy Policy Languages Topic-wise Internships
Contact Us CS Subjects How to begin? Videos
Video Tutorials

@geeksforgeeks, Some rights reserved

https://www.geeksforgeeks.org/c-program-for-tower-of-hanoi/ 8/8

You might also like