перемещение диска в Ханойской башне - PullRequest
0 голосов
/ 08 октября 2010

Пожалуйста, объясните мне процесс рекурсии шаг за шагом, используя F7.

Я просто не могу соотнести возврат с потоком контроля.

#include<stdio.h>
#include<conio.h>

void t_of_h(char, char, char, int);

void main()
{
    int n;
    clrscr();

    printf("Enter no of DISC in Tower of Hanoi : ");
    scanf("%d",&n);

    printf("\nTower of Hanoi using %d DISCS\n",n);

    t_of_h('X', 'Y', 'Z', n);
    getch();
}

void t_of_h(char p1, char p2, char p3, int n)
{
   if(n==0)
     printf("Unsuccessful move\n");
   if(n==1)
     printf("Move DISC from %c to %c\n",p1,p3);
   else
   {
      t_of_h(p1,p3,p2,n-1);
      t_of_h(p1,p2,p3,1);
      t_of_h(p2,p1,p3,n-1);
   }
}

Ответы [ 2 ]

3 голосов
/ 08 октября 2010

Как вы перемещаете N дисков из башни A в башню B?

  1. Переместите диски N-1 из башни А в башню С.
  2. Переместите нижний диск от башни A к башне B.
  3. Переместите диски N-1 из башни C в башню B.

Код является довольно прямой реализацией этого. Если вы предполагаете, что можете перемещать произвольное количество дисков из одной башни в другую, то это явно работает. Как вы перемещаете диски N-1 из башни А в башню С? Итак, вы перемещаете диски N-2 из башни A в башню B, затем перемещаете N-1-й диск из башни A в башню C, затем перемещаете диски N-2 из башни B в башню C. И повторите ... *

В конце концов рекурсия останавливается, потому что у вас есть один диск для перемещения.

Интересным упражнением является «написание тестового жгута, который гарантирует, что недопустимые ходы никогда не будут сделаны».


ОК - я запустил код. Его визуализация процесса ужасна. Очень трудно понять, что происходит. Но это прямой отчет о том, что делает алгоритм. И что теперь?

1 диск

Enter no of DISC in Tower of Hanoi : 1

Tower of Hanoi using 1 DISCS
Move DISC from X to Z

2 диска

Enter no of DISC in Tower of Hanoi : 2

Tower of Hanoi using 2 DISCS
Move DISC from X to Y
Move DISC from X to Z
Move DISC from Y to Z

Обратите внимание, что он перемещает диски из X в Z. Как вы перемещаете 2 диска из X в Z? Переместите верхний диск от X до Y. Переместите нижний диск от X до Z. Переместите оригинальный верхний диск от Y до Z.

3 диска

Enter no of DISC in Tower of Hanoi : 3

Tower of Hanoi using 3 DISCS
Move DISC from X to Z
Move DISC from X to Y
Move DISC from Z to Y
Move DISC from X to Z
Move DISC from Y to X
Move DISC from Y to Z
Move DISC from X to Z
0 голосов
/ 08 октября 2010

Использование F7?

Хорошо, если у вас возникли проблемы с пониманием рекурсии, достаньте ручку и бумагу и выполните программу.Укажите в каждом вызове правильные аргументы.

Должно быть проще, если вы можете его визуализировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...