Implementare C++

Codul sursă complet și explicat pentru algoritmul recursiv.

hanoi.cpp
#include <iostream>
using namespace std;

// Funcția recursivă pentru Turnurile din Hanoi
// n: numărul de discuri
// from_rod: tija sursă
// to_rod: tija destinație
// aux_rod: tija auxiliară
void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod) {
    // Cazul de bază: dacă avem un singur disc, îl mutăm direct
    if (n == 1) {
        cout << "Mută discul 1 de pe tija " << from_rod
             << " pe tija " << to_rod << endl;
        return;
    }

    // Pasul 1: Mută n-1 discuri de pe sursă pe auxiliar
    towerOfHanoi(n - 1, from_rod, aux_rod, to_rod);

    // Pasul 2: Mută discul n (cel mai mare) de pe sursă pe destinație
    cout << "Mută discul " << n << " de pe tija " << from_rod
         << " pe tija " << to_rod << endl;

    // Pasul 3: Mută cele n-1 discuri de pe auxiliar pe destinație
    towerOfHanoi(n - 1, aux_rod, to_rod, from_rod);
}

int main() {
    int n;
    cout << "n="; cin >> n;

    cout << "Rezolvarea pentru " << n << " discuri:" << endl;
    towerOfHanoi(n, 'A', 'C', 'B'); // A, B și C sunt numele tijelor

    return 0;
}
Explicații Detaliate

Semnătura funcției:
Funcția primește 4 parametri: numărul de discuri n și caracterele care identifică cele 3 tije (Sursă, Destinație, Auxiliar).

Cazul de bază (n=1):
Când a mai rămas un singur disc de mutat, îl mutăm pur și simplu de la sursă la destinație. Aceasta este condiția de oprire a recursivității.

Apelurile recursive:
Observați cum se schimbă rolul tijelor în apelurile recursive. În primul apel, tija auxiliară devine destinație temporară. În al doilea apel, tija auxiliară devine sursă.

Complexitate

Timp: O(2^n)
Numărul de mutări crește exponențial cu numărul de discuri.

Spațiu: O(n)
Spațiul este utilizat de stiva de apeluri recursive, care are o adâncime maximă egală cu n.