📖 Scenario: Imagine you have three rods and a number of disks of different sizes which can slide onto any rod. The puzzle starts with the disks neatly stacked in ascending order of size on one rod, the smallest at the top, making a conical shape.Your task is to move the entire stack to another rod, obeying the following simple rules:Only one disk can be moved at a time.Each move consists of taking the upper disk from one of the stacks and placing it on top of another stack or on an empty rod.No disk may be placed on top of a smaller disk.
🎯 Goal: You will write a Rust program that prints the steps to solve the Tower of Hanoi problem for 3 disks. The program will show which disk moves from which rod to which rod, step by step.
📋 What You'll Learn
Create a variable to hold the number of disks (3).
Create a function called tower_of_hanoi that takes the number of disks and names of source, auxiliary, and destination rods.
Use recursion inside tower_of_hanoi to print the moves.
Print the moves in the format: Move disk X from rod Y to rod Z.
💡 Why This Matters
🌍 Real World
The Tower of Hanoi problem helps understand recursion, a key concept in programming and problem solving.
💼 Career
Recursion is used in many software engineering tasks like parsing, searching, and algorithm design.
Progress0 / 4 steps
1
Set up the number of disks
Create a variable called num_disks and set it to 3.
DSA Rust
Hint
Use let num_disks = 3; inside the main function.
2
Define the Tower of Hanoi function
Define a function called tower_of_hanoi that takes four parameters: n: u32, source: &str, auxiliary: &str, and destination: &str. The function should have no return value.
DSA Rust
Hint
Write the function signature exactly as fn tower_of_hanoi(n: u32, source: &str, auxiliary: &str, destination: &str).
3
Implement the recursive logic
Inside the tower_of_hanoi function, write the recursive logic: if n == 1, print Move disk 1 from rod {source} to rod {destination}. Otherwise, call tower_of_hanoi(n - 1, source, auxiliary, destination), then print Move disk {n} from rod {source} to rod {destination}, then call tower_of_hanoi(n - 1, auxiliary, source, destination).
DSA Rust
Hint
Use if n == 1 to print the move directly. Otherwise, use recursion to move disks step by step.
4
Call the function and print the moves
Inside the main function, call tower_of_hanoi(num_disks, "A", "B", "C") to print the steps to move disks from rod A to rod C using rod B as auxiliary.
DSA Rust
Hint
Call tower_of_hanoi(num_disks, "A", "B", "C") inside main to start printing the moves.
Practice
(1/5)
1. What is the minimum number of moves required to solve the Tower of Hanoi problem with 3 disks?
easy
A. 7
B. 6
C. 8
D. 9
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 A
Quick Check:
2^3 - 1 = 7 [OK]
Hint: Use formula 2^n - 1 for minimum moves [OK]
Common Mistakes:
Calculating 2*n - 1 instead of 2^n - 1
Confusing number of disks with moves
Choosing the next integer after 7
2. Which of the following Rust function signatures correctly represents the Tower of Hanoi recursive function for moving disks?
easy
A. fn tower_of_hanoi(n: i32, from: String, to: String)
B. fn tower_of_hanoi(n: u32, from: char, to: char, aux: char)
C. fn tower_of_hanoi(n: u32, from: i32, to: i32, aux: i32)
D. fn tower_of_hanoi(n: u32, from: char, to: char)
Solution
Step 1: Identify correct parameter types
The function needs number of disks (u32) and three rods (chars) to represent pegs.
Step 2: Check function signature options
fn tower_of_hanoi(n: u32, from: char, to: char, aux: char) uses u32 for disks and char for rods, matching common Tower of Hanoi implementations.
Final Answer:
fn tower_of_hanoi(n: u32, from: char, to: char, aux: char) -> Option B
Quick Check:
Correct parameter types and count [OK]
Hint: Use u32 for disks and char for rods in signature [OK]
Common Mistakes:
Using String instead of char for rods
Missing auxiliary rod parameter
Using signed integer for disk count
3. What will be the output sequence of moves for the Tower of Hanoi function call tower_of_hanoi(2, 'A', 'C', 'B')?
medium
A. Move disk 1 from A to C
Move disk 2 from A to B
Move disk 1 from C to B
B. Move disk 2 from A to B
Move disk 1 from A to C
Move disk 2 from B to C
C. Move disk 1 from A to B
Move disk 2 from A to C
Move disk 1 from B to C
D. Move disk 1 from B to C
Move disk 2 from A to C
Move disk 1 from A to B
Solution
Step 1: Understand the recursive steps for 2 disks
Move disk 1 from source to auxiliary, move disk 2 from source to target, then move disk 1 from auxiliary to target.
Step 2: Apply to given rods
From 'A' to 'B' (aux), then 'A' to 'C' (target), then 'B' to 'C' (target).
Final Answer:
Move disk 1 from A to B
Move disk 2 from A to C
Move disk 1 from B to C -> Option C
Quick Check:
Correct move order for 2 disks [OK]
Hint: For 2 disks, move small to aux, big to target, small to target [OK]
Common Mistakes:
Swapping auxiliary and target rods
Reversing move order
Confusing disk numbers
4. Identify the error in this Rust Tower of Hanoi recursive function snippet:
fn tower_of_hanoi(n: u32, from: char, to: char, aux: char) {
if n == 0 {
return;
}
tower_of_hanoi(n - 1, from, to, aux);
println!("Move disk {} from {} to {}", n, from, to);
tower_of_hanoi(n - 1, aux, to, from);
}
medium
A. The recursive calls have incorrect rod parameters swapped
B. The println! macro syntax is incorrect
C. The function does not return any value but should return an integer
D. The base case should be n == 1, not n == 0
Solution
Step 1: Recall standard Tower of Hanoi recursion
To move n disks from src to dst using aux: move n-1 src->aux using dst; move n src->dst; move n-1 aux->dst using src.
Step 2: Check first recursive call
Code has tower_of_hanoi(n-1, from, to, aux); but should be tower_of_hanoi(n-1, from, aux, to); dst and aux swapped in first call.
Step 3: Other parts correct
Base case n==0 fine for u32; println! syntax correct; second recursive call correct.
Final Answer:
The recursive calls have incorrect rod parameters swapped -> Option A
Quick Check:
First call: dst/aux swapped [OK]
Hint: Check order of rods in recursive calls carefully [OK]
Common Mistakes:
Confusing base case condition
Mixing up source, target, auxiliary rods
Expecting return value in void function
5. You want to solve the Tower of Hanoi problem for 4 disks but only have 2 rods available. What is the minimum number of moves required?
hard
A. 15
B. 31
C. 7
D. Impossible to solve with 2 rods
Solution
Step 1: Understand Tower of Hanoi rod requirements
The classic Tower of Hanoi problem requires 3 rods to move disks following the rules.
Step 2: Check if 2 rods suffice
With only 2 rods, it is impossible to move all disks without breaking the rules (no larger disk on smaller disk).
Final Answer:
Impossible to solve with 2 rods -> Option D
Quick Check:
Minimum rods needed = 3 [OK]
Hint: Tower of Hanoi needs 3 rods; 2 rods can't solve it [OK]
Common Mistakes:
Applying formula 2^n - 1 without checking rods
Assuming fewer rods still work
Confusing rods with disks
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.