Реконструкция Ханойской башни с функцией перемещения, которая перемещает индексированные кольца - PullRequest
0 голосов
/ 28 января 2019

У меня проблема с рекурсией в Ханойской башне.Мне дана функция перемещения, которая принимает 2 аргумента:

  • j (индекс кольца: 1 -> n снизу вверх) и
  • позиция.

Я нашел путь к рекурсивной проблеме без использования этой функции, но я застрял, когда мне нужно ее использовать.На самом деле, я не знаю, как эффективно изменить мою j переменную.

moveTower(n, position1, position2):
    if n > 1:
        moveTower(n-1, position1, aux)
        move(j, position2) """ That's where i'm stuck """
        moveTower(n-1, aux, position2)
    else:
        move(j, position2)

Я нашел какой-то паттерн для эволюции j:

Например, с3 кольца:

j = 3
j = 2
j = 3
j = 1
j = 3
j = 2
j = 3

1 Ответ

0 голосов
/ 28 января 2019

Я считаю, что самый простой способ вычислить j - это заметить, что он всегда отличается от position1 и position2.Таким образом, вы можете написать вложенный if/else, или вы можете передать его явно в качестве третьего параметра, или, если вы хотите немного хитрой магии, используйте:

j = 6 - position1 - position2

Идея в том, что 6 = 1 + 2 + 3так что это вычисляет j как единицу из (1,2,3), который не position1 или position2.

...