Tower of Hanoi Problem in DSA C# - Time & Space Complexity
We want to understand how the time needed to solve the Tower of Hanoi grows as we add more disks.
How does the number of moves change when the number of disks increases?
Analyze the time complexity of the recursive Tower of Hanoi solution below.
void TowerOfHanoi(int n, char from, char to, char aux) {
if (n == 1) {
Console.WriteLine($"Move disk 1 from {from} to {to}");
return;
}
TowerOfHanoi(n - 1, from, aux, to);
Console.WriteLine($"Move disk {n} from {from} to {to}");
TowerOfHanoi(n - 1, aux, to, from);
}
This code moves n disks from one peg to another using recursion and an auxiliary peg.
Look at the recursive calls that repeat the same process for smaller numbers of disks.
- Primary operation: Recursive calls that move n-1 disks twice.
- How many times: Each call makes two smaller calls plus one move.
Each time we add a disk, the number of moves roughly doubles and adds one more move.
| Input Size (n) | Approx. Operations (moves) |
|---|---|
| 1 | 1 |
| 2 | 3 |
| 3 | 7 |
| 4 | 15 |
Pattern observation: The moves double plus one each time, growing very fast as n increases.
Time Complexity: O(2^n)
This means the time needed grows exponentially, doubling with each extra disk.
[X] Wrong: "The time grows linearly because we just move each disk once."
[OK] Correct: Actually, smaller disks move many times during the process, causing the total moves to grow exponentially.
Understanding this classic problem helps you think about recursion and exponential growth, skills useful in many coding challenges.
"What if we changed the problem to allow moving multiple disks at once? How would the time complexity change?"
Practice
Solution
Step 1: Understand the formula for minimum moves
The minimum moves required for n disks is 2^n - 1.Step 2: Calculate for 3 disks
For 3 disks, minimum moves = 2^3 - 1 = 8 - 1 = 7.Final Answer:
7 -> Option BQuick Check:
2^3 - 1 = 7 [OK]
- Confusing total moves with number of disks
- Using n instead of 2^n - 1
- Calculating 2*n - 1 instead of 2^n - 1
Solution
Step 1: Identify correct parameter types
The Tower of Hanoi function typically uses integer for disk count and characters for rods.Step 2: Check return type and parameters
The function usually returns void and takes 3 rods as char parameters plus disk count as int.Final Answer:
void TowerOfHanoi(int n, char fromRod, char toRod, char auxRod) -> Option DQuick Check:
Correct signature uses void and char rods [OK]
- Using string instead of char for rods
- Returning int instead of void
- Missing auxiliary rod parameter
Solution
Step 1: Understand the recursive move sequence for 2 disks
Move smaller disk 1 to auxiliary rod B, then move disk 2 to target rod C, then move disk 1 from B to C.Step 2: Verify the move order
Sequence is: 1 from A to B, 2 from A to C, 1 from B to C.Final Answer:
Move disk 1 from A to B Move disk 2 from A to C Move disk 1 from B to C -> Option AQuick Check:
Correct move order for 2 disks [OK]
- Swapping disk numbers in moves
- Confusing auxiliary and target rods
- Reversing move order
void Hanoi(int n, char from, char to, char aux) {
if (n == 0) return;
Hanoi(n - 1, from, aux, to);
Console.WriteLine($"Move disk {n} from {from} to {to}");
Hanoi(n - 1, aux, to, from);
}Solution
Step 1: Check base case correctness
Base case n == 0 means no disks to move, which is correct to stop recursion.Step 2: Verify recursive calls and print statement
Recursive calls correctly move n-1 disks between rods, and print statement moves disk n from 'from' to 'to'.Final Answer:
No error, code is correct -> Option CQuick Check:
Base case and recursion are correctly implemented [OK]
- Changing base case to n==1 incorrectly
- Mixing up rod parameters in recursive calls
- Printing wrong disk number
Solution
Step 1: Calculate total moves for 4 disks
Total moves = 2^4 - 1 = 15 moves.Step 2: Count moves involving disk 1
Disk 1 moves every alternate move, so number of moves = (total moves + 1) / 2 = (15 + 1)/2 = 8.Final Answer:
8 -> Option AQuick Check:
Disk 1 moves half the times plus one [OK]
- Assuming disk 1 moves equal to total moves
- Using total moves minus one
- Confusing disk 1 moves with total disks
Ready to prove it?
Pass the test and this pattern moves unknown
