Wieże Hanoi i rekurencja

0

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

#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

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.

0
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:

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