Tower of Hanoi – JS

Share
tower of hanoi copilot
/**
 * Solves the Tower of Hanoi puzzle recursively.
 *
 * @param {number} n - Number of disks
 * @param {string} fromPeg - Source peg name
 * @param {string} toPeg - Target peg name
 * @param {string} auxPeg - Auxiliary peg name
 * @param {Array} movesList - (Optional) Array to collect moves
 * @returns {Array} - List of moves
 */
function towerOfHanoi(n, fromPeg, toPeg, auxPeg, movesList = []) {
    if (n === 1) {
        const move = `Move disk 1 from ${fromPeg}${toPeg}`;
        console.log(move);
        movesList.push(move);
        return movesList;
    }

    // Step 1: Move top (n-1) disks from source to auxiliary
    towerOfHanoi(n - 1, fromPeg, auxPeg, toPeg, movesList);

    // Step 2: Move the largest disk to target
    const move = `Move disk ${n} from ${fromPeg}${toPeg}`;
    console.log(move);
    movesList.push(move);

    // Step 3: Move (n-1) disks from auxiliary to target
    towerOfHanoi(n - 1, auxPeg, toPeg, fromPeg, movesList);

    return movesList;
}

// Example usage
const numberOfDisks = 3;
const moves = towerOfHanoi(numberOfDisks, 'A', 'C', 'B');
console.log(`Total moves: ${moves.length}`);