Discover how a simple rule can solve a seemingly impossible puzzle step-by-step!
Why Tower of Hanoi Problem in DSA Typescript?
Imagine you have three pegs and a stack of different sized disks on one peg. You want to move all disks to another peg, but you can only move one disk at a time and never place a bigger disk on top of a smaller one. Trying to figure out the steps manually can be confusing and overwhelming.
Manually planning each move is slow and easy to mess up. You might forget a step or break the rules without realizing it. The number of moves grows quickly as disks increase, making it impossible to track without a clear method.
The Tower of Hanoi problem uses a simple, repeatable process to solve the puzzle no matter how many disks there are. It breaks the problem into smaller parts, moving disks step-by-step in a safe order. This method guarantees the solution without guesswork.
function moveDisk(from, to) { // Move one disk manually } // No clear plan for multiple disks
function towerOfHanoi(disks, from, to, aux) { if (disks === 1) { console.log(`Move disk 1 from ${from} to ${to}`); return; } towerOfHanoi(disks - 1, from, aux, to); console.log(`Move disk ${disks} from ${from} to ${to}`); towerOfHanoi(disks - 1, aux, to, from); }
This problem teaches how to solve complex tasks by breaking them into smaller, manageable steps using recursion.
It's like organizing a stack of plates from one shelf to another without breaking or mixing their order, using a helper shelf to hold plates temporarily.
Manual moves get confusing as disks increase.
Recursive method breaks problem into smaller steps.
Ensures all rules are followed and puzzle is solved efficiently.
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]
- Forgetting to subtract 1
- Using n instead of 2^n
- Confusing moves with disks
Solution
Step 1: Identify parameters needed for Tower of Hanoi
We need number of disks (number), source peg (string), destination peg (string), and auxiliary peg (string).Step 2: Match with function signature
function towerOfHanoi(n: number, from: string, to: string, aux: string): void matches all parameters with correct types and returns void as it prints moves.Final Answer:
function towerOfHanoi(n: number, from: string, to: string, aux: string): void -> Option AQuick Check:
Correct parameters and return type [OK]
- Using wrong parameter types
- Missing auxiliary peg parameter
- Wrong return type
function towerOfHanoi(n: number, from: string, to: string, aux: string): void {
if (n === 1) {
console.log(`Move disk 1 from ${from} to ${to}`);
return;
}
towerOfHanoi(n - 1, from, aux, to);
console.log(`Move disk ${n} from ${from} to ${to}`);
towerOfHanoi(n - 1, aux, to, from);
}
towerOfHanoi(2, 'A', 'C', 'B');Solution
Step 1: Trace first recursive call with n=2
Call towerOfHanoi(1, 'A', 'B', 'C') prints "Move disk 1 from A to B".Step 2: Print move for disk 2
Prints "Move disk 2 from A to C".Step 3: Trace second recursive call with n=1
Call towerOfHanoi(1, 'B', 'C', 'A') prints "Move disk 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 DQuick Check:
Follow recursion steps carefully [OK]
- Mixing source and auxiliary pegs
- Printing moves in wrong order
- Confusing disk numbers
function towerOfHanoi(n: number, from: string, to: string, aux: string): void {
if (n === 0) {
console.log(`Move disk 1 from ${from} to ${to}`);
return;
}
towerOfHanoi(n - 1, from, aux, to);
console.log(`Move disk ${n} from ${from} to ${to}`);
towerOfHanoi(n - 1, aux, to, from);
}Solution
Step 1: Analyze base case condition
Base case should be when n equals 1, not 0, because disk numbering starts at 1.Step 2: Fix base case and print statement
Change if (n === 0) to if (n === 1) and print move for disk 1.Final Answer:
Change base case to if (n === 1) and print move for disk 1 -> Option AQuick Check:
Base case must handle smallest disk [OK]
- Using n === 0 as base case
- Printing move for disk 1 in wrong place
- Skipping base case
Solution
Step 1: Understand requirement to print only disk 1 moves
We must keep recursion intact but print moves only when disk number is 1.Step 2: Modify print statement with condition
Add if (n === 1) before printing move to filter only disk 1 moves.Final Answer:
Add condition to print only if disk number is 1 inside the print statement -> Option CQuick Check:
Filter print, keep recursion [OK]
- Removing recursive calls breaks solution
- Filtering moves after recursion wastes time
- Changing base case incorrectly
Ready to prove it?
Pass the test and this pattern moves unknown
