Wieza Hanoi

0

Mam problem z rekurenycjnym algorytmem wiezy Hanoi. Czytalem pelno stron opisujacych to i dalej nie rozumiem.
Wiem ze majac n krazkow optymalnym ruchem bedzie n-1 krazkow przelozyc z A do B nastepnie ten 1 z A do C i dopiero znowu te n-1 z B do C. Fajnie sie tlumaczy to normalnie.
Mam ta funkcje rekurencyjna i nie mam pojecia dlaczego to dziala

 
#include <iostream>
using namespace std;

void hanoi(int n, char A, char B, char C)
{
  // przekłada n krążków z A korzystając z B na C
  if (n > 1)
  {
      cout << "hanoi( " << n-1 << "," << A << "," << C << "," << B << ")\n";
    hanoi(n-1, A, C, B);
    cout <<"Przenosze klocek o wielkosci " << n << " z " <<  A << " -> " << C << endl;
    cout << "hanoi (" << n-1 << "," << B << "," << A << "," << C << ")\n";
    hanoi(n-1, B, A, C);
  }
  else{
        cout <<"Przenosze klocek o wielkosci " << n << " z " <<  A << " -> " << C << endl;
  }
}

int main(int argc, char *argv[])
{
  hanoi(4, 'A', 'B', 'C');
  return 0;
}

Probowalem sobie to rozpisac w taki sposob
hanoi(4,A,B,C) // przenosi z A patyka na B wykorzystujac C
hanoi(3,A,C,B)
hanoi(2,A,B,C)
hanoi(1,C,B)
I pozniej sie zaczynaja powroty z funkcji.

0

polecam algorithm.org (w googlew wpisz) tam szukaj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1