Ханойские башни с 3 параметрами в C ++, Tower (диск, от, до) - PullRequest
2 голосов
/ 30 марта 2011

Я пытался выяснить, как реализовать рекурсивную функцию всего с 3 параметрами: Tower (Disk, from, to). Я провел много исследований в Google. Все результаты были получены с помощью четырех параметров рекурсивной функции (диск, a, b, c). Любая помощь будет оценена.

EDIT:

typedef void (*towersActionFn)(unsigned short fromPost, unsigned short endPost);

void solveTowers(unsigned short nDisks, unsigned short start, unsigned short end, towersActionFn f);

the towersActionFn используется только для отображения решения.

Ответы [ 2 ]

1 голос
/ 30 марта 2011
//Pegs are counted 0 to 2

void Tower(int Disk, int Startpeg, int Endpeg)
{
    if(Disc <= 0)  //Sanity check
        return;

    if(Disc == 1)
        cout << "Move disk from "<<Startpeg<<" to "<<Endpeg<<endl;
    else
    {
        int Other = 3 - Startpeg - Endpeg;
        Tower(Disc-1, Startpeg,  Other);
        Tower(1, Startpeg, Endpeg); //Inline output would do here... Calling for message consistency.
        Tower(Disc-1, Other, Endpeg);
    }
}
0 голосов
/ 30 марта 2011

Вот алгоритм

...