Bird
Raised Fist0
DSA Javascriptprogramming~5 mins

Tower of Hanoi Problem in DSA Javascript - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Tower of Hanoi Problem
O(2^n)
Understanding Time Complexity

We want to understand how the number of moves grows as we increase the number of disks in the Tower of Hanoi problem.

How does the work needed change when we add more disks?

Scenario Under Consideration

Analyze the time complexity of the recursive Tower of Hanoi solution below.


function towerOfHanoi(n, from, to, aux) {
  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);
}
    

This code moves n disks from one peg to another using recursion and an auxiliary peg.

Identify Repeating Operations

Look at the recursive calls that repeat the same process for smaller numbers of disks.

  • Primary operation: Recursive calls to move smaller stacks of disks.
  • How many times: Each call makes two recursive calls with n-1 disks plus one move operation.
How Execution Grows With Input

Each time we add a disk, the number of moves roughly doubles and then adds one more move.

Input Size (n)Approx. Operations (Moves)
11
23
37
415
531

Pattern observation: The moves grow exponentially, doubling each time plus one extra move.

Final Time Complexity

Time Complexity: O(2n)

This means the number of moves grows very fast as we add more disks, doubling roughly with each extra disk.

Common Mistake

[X] Wrong: "The time grows linearly with the number of disks because we just move each disk once."

[OK] Correct: Actually, disks are moved multiple times in a specific order, so the total moves grow exponentially, not just once per disk.

Interview Connect

Understanding this problem helps you think about recursion and exponential growth, which are common in many coding challenges.

Self-Check

"What if we changed the problem to move disks iteratively instead of recursively? How would the time complexity change?"

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

  1. Step 1: Understand the formula for minimum moves

    The minimum moves required for n disks is 2^n - 1.
  2. Step 2: Calculate for 3 disks

    For 3 disks, minimum moves = 2^3 - 1 = 8 - 1 = 7.
  3. Final Answer:

    7 -> Option A
  4. Quick Check:

    2^3 - 1 = 7 [OK]
Hint: Use formula 2^n - 1 for minimum moves [OK]
Common Mistakes:
  • Forgetting to subtract 1
  • Using n instead of 2^n - 1
  • Confusing number of disks with moves
2. Which of the following is the correct base case condition in a recursive Tower of Hanoi function in JavaScript?
easy
A. if (n < 0) return;
B. if (n === 1) moveDisk();
C. if (n > 1) return;
D. if (n === 0) return;

Solution

  1. Step 1: Identify base case for recursion

    The recursion stops when there are no disks to move, i.e., n === 0.
  2. Step 2: Check the options

    if (n === 0) return; correctly returns when n is 0, stopping recursion.
  3. Final Answer:

    if (n === 0) return; -> Option D
  4. Quick Check:

    Base case is n === 0 [OK]
Hint: Base case stops recursion at zero disks [OK]
Common Mistakes:
  • Using n === 1 as base case incorrectly
  • Not stopping recursion causing infinite calls
  • Using invalid conditions like n < 0
3. What will be the output sequence of moves for 2 disks in the Tower of Hanoi problem using this code snippet?
function towerOfHanoi(n, from, to, aux) {
  if (n === 0) 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');
medium
A. "Move disk 2 from A to C" "Move disk 1 from B to A" "Move disk 2 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 A to C" "Move disk 2 from A to B" "Move disk 1 from C to B"

Solution

  1. Step 1: Trace recursive calls for n=2

    First move disk 1 from A to B, then disk 2 from A to C, then disk 1 from B to C.
  2. Step 2: Match output with options

    "Move disk 1 from A to B" "Move disk 2 from A to C" "Move disk 1 from B to C" matches the exact sequence of moves printed by the code.
  3. 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
  4. Quick Check:

    Correct move sequence for 2 disks = "Move disk 1 from A to B" "Move disk 2 from A to C" "Move disk 1 from B to C" [OK]
Hint: Follow recursion calls step-by-step [OK]
Common Mistakes:
  • Mixing source and auxiliary rods
  • Confusing disk numbers in moves
  • Ignoring order of recursive calls
4. Identify the error in this Tower of Hanoi recursive function and select the fix:
function towerOfHanoi(n, from, to, aux) {
  if (n === 1) {
    console.log(`Move disk 1 from ${from} to ${to}`);
    return;
  }
  towerOfHanoi(n - 1, from, to, aux);
  console.log(`Move disk ${n} from ${from} to ${to}`);
  towerOfHanoi(n - 1, aux, to, from);
}
medium
A. Swap 'to' and 'aux' in the first recursive call
B. Change base case to n === 0
C. Remove the second recursive call
D. Add an extra console.log before recursion

Solution

  1. Step 1: Analyze recursive calls

    The first recursive call should move n-1 disks from 'from' to 'aux' using 'to' as auxiliary, but here 'to' and 'aux' are swapped.
  2. Step 2: Correct the argument order

    Swapping 'to' and 'aux' in the first recursive call fixes the logic to move disks correctly.
  3. Final Answer:

    Swap 'to' and 'aux' in the first recursive call -> Option A
  4. Quick Check:

    Correct recursive call order fixes error [OK]
Hint: Check recursive call parameters carefully [OK]
Common Mistakes:
  • Mixing auxiliary and target rods
  • Incorrect base case causing infinite recursion
  • Removing necessary recursive calls
5. You want to solve the Tower of Hanoi problem for 4 disks but only want to print moves where disk 1 is moved. How would you modify this function?
function towerOfHanoi(n, from, to, aux) {
  if (n === 0) return;
  towerOfHanoi(n - 1, from, aux, to);
  console.log(`Move disk ${n} from ${from} to ${to}`);
  towerOfHanoi(n - 1, aux, to, from);
}
hard
A. Change base case to n === 1 and print only then
B. Add an if condition to print only when n === 1 inside the function
C. Remove recursive calls and print only disk 1 move
D. Print all moves but filter output outside the function

Solution

  1. Step 1: Understand the requirement

    We want to print moves only when disk 1 moves, but still perform all recursive calls to solve the problem.
  2. Step 2: Modify print statement with condition

    Add an if condition to print only when n === 1, so other moves are not printed but recursion continues.
  3. Final Answer:

    Add an if condition to print only when n === 1 inside the function -> Option B
  4. Quick Check:

    Conditional print inside recursion solves problem [OK]
Hint: Use if (n === 1) to print selectively [OK]
Common Mistakes:
  • Changing base case breaks recursion
  • Removing recursive calls stops solution
  • Filtering output outside misses recursion logic
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard