|
непонимание по ханойским башням
|
|||
---|---|---|---|
#18+
Добрый всем день. Помогите тупому. Нашел на просторах интернета решение задачи про ханойские башни. вот решение: Переместить n-1 дисков с колышка 1 на колышек 2, используя колышек 3, как временное размещение. Переместить последний наибольший диск с колышка 1 на колышек3. Переместить n-1 дисков с колышка 2 на колышек 3, используя колышек 1, как временное размещение. программа такая : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
а теперь вопрос . ведь программа не соответствует предложенному выше алгоритму ? вот самая первая строчка в программе : hanoy(m-1, a, c, b); перенос (m-1) из a(1) на c(3) , использовав b(2) как вспомогательный шест. а вот строка из алгоритма Переместить n-1 дисков с колышка 1 на колышек 2, используя колышек 3, как временное размещение. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2020, 12:40 |
|
непонимание по ханойским башням
|
|||
---|---|---|---|
#18+
andron81 hanoy(m-1, a, c, b); перенос (m-1) из a(1) на c(3) , использовав b(2) как вспомогательный шест. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2020, 14:48 |
|
непонимание по ханойским башням
|
|||
---|---|---|---|
#18+
Z axis andron81 hanoy(m-1, a, c, b); перенос (m-1) из a(1) на c(3) , использовав b(2) как вспомогательный шест. именно (m-1) дисков. это рекурсивная функция с постоянным уменьшением . перестановка одного диска это : строка Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2020, 15:09 |
|
непонимание по ханойским башням
|
|||
---|---|---|---|
#18+
andron81 Z axis пропущено... Если m это число дисков, то (m-1) — перенос одного диска, а не (m-1) диска. 😎 именно (m-1) дисков. это рекурсивная функция с постоянным уменьшением . Посмотри на вывод кода Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
и сравни перемещения со словесным алгоритмом. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2020, 15:45 |
|
непонимание по ханойским башням
|
|||
---|---|---|---|
#18+
Z axis andron81 пропущено... именно (m-1) дисков. это рекурсивная функция с постоянным уменьшением . Посмотри на вывод кода Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
и сравни перемещения со словесным алгоритмом. да согласен, пример запустил он показывает следование алгоритму . И Вы на вопрос ответили. но решение непонятно. где тут красота рекурсии ? как скажем вы с отличным опытом в программировании досекли , что расстановки параметров должны быть такие (a, c, b) , (a,b) (с,b,a) ? Вы правы, я руководствовался именно логикой порядка следования параметров . То есть разбираем решение по моей логике это : 1) перемещаем (a,c,b, (n-1)) - с "1" на "3" (n-1) дисков,использовав "2" как вспомогательный . таким образом "2" - пустой. 2) a,b - перемещаем самый большой диск с "1" на "2" 3) перемещаем (c, b, a,(n-1)) - перемещаем c "3" на "2" (n-1) дисков, используя "1" как вспомогательный. этот алгоритм не соответствует первому. ну да ладно. А почему я не могу таким алгоритмом воспользоваться : (a,b,c,(n-1)) (a,c) (b,c,a,(n-1)) ??? вот он уже не рабочий. Т. е. само тело функции его выходит нельзя сопоставлять с алгоритмом ? что надо сделать , чтобы выстроить правильно параметры ? может быть тупо выстроить дерево решений по алгоритму для 3 палок , 4 и таким образом расставить параметры ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 18:18 |
|
непонимание по ханойским башням
|
|||
---|---|---|---|
#18+
andron81, кстати есть ещё решение и оно рабочее. это вообще вынос мозга )))) Код: plaintext 1. 2. 3. 4. 5.
разберем при n=3. Смотрите, мы в первой строке из "1" штыка перемещаем 2 диска в "3" , используя "2" как вспомогательный. при этом тупо в 1-ом остается один самый большой диск. а потом мы из "1" перемещаем этот большой диск на диск "3" , где диска 2 и они меньше по диаметру чем тот что перемещаем. а так нельзя )))) ну а потом из штыка № "2" перемещаем в № "1" использовав вспомогательный "3". Если первое решение ещё куда не шло, то это жесть .... выходит словесный алгоритм совсем нельзя сопоставлять с решением , а именно с рекурсивной функцией. а как тогда эти 2 решения найдены ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 18:33 |
|
непонимание по ханойским башням
|
|||
---|---|---|---|
#18+
andron81 вот самая первая строчка в программе : hanoy(m-1, a, c, b); перенос (m-1) из a(1) на c(3) , использовав b(2) как вспомогательный шест. Т.е. a == 1, b == 3, c== 2. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2020, 09:24 |
|
непонимание по ханойским башням
|
|||
---|---|---|---|
#18+
Z axis andron81 вот самая первая строчка в программе : hanoy(m-1, a, c, b); перенос (m-1) из a(1) на c(3) , использовав b(2) как вспомогательный шест. Т.е. a == 1, b == 3, c== 2. а разобрался. спасибо. а тот пример №2 там параметры функции наоборот устроены. то есть у нас с вами функция переносила с "а" на "b" и спользуя "c" Код: plaintext 1.
а в этом примере функция переносила с a на c используя b как вспомогательный. Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2020, 14:48 |
|
|
start [/forum/topic.php?fid=57&fpage=10&tid=2017488]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 144ms |
0 / 0 |