Wieże Hanoi i rekurencja

R1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Czołem, mam problem z wieżą Hanoi, przy małych pomocach udało mi się napisać to, jednak nie rozumiem tych przejść zbytnio:

Kopiuj
#include <iostream>
using namespace std;
void hanoi(int n,char Begin,char Aux, char End)
{
    if(n==1)
        cout<<Begin<<" -> "<<End<<endl;
    else
    {
        hanoi(n-1,Begin,End,Aux);
        hanoi(1,Begin,Aux,End);
        hanoi(n-1,Aux,Begin,End);

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

Może ktoś mi wyjaśnić jak tutaj działa ta rekurencja ? Na moje oko to chyba powinna się cały czas wywoływać procedura z pierwszej lini

Kopiuj
hanoi(n-1,Begin,End,Aux); 

Aż do momentu kiedy n=1 i wypisze się A->C, oczywiście w konsoli jest co innego i program działa.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
0
Kopiuj
hanoi(n-1,Begin,End,Aux);      //przeniesc n-1 z Begin do Aux
hanoi(1,Begin,Aux,End);         //przeniesc 1 z Begin do End
hanoi(n-1,Aux,Begin,End);      //przeniesc n-1 z Aux do End

Zresztą łatwiej to zobaczyć na animacji:

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.