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.