Я решаю проблему TowerOfHanoi, используя стеки в STL (C ++). Но я не уверен, почему я получаю это предупреждение в строке 6703:
Когда я получаю это предупреждение, я не получаю ожидаемый результат при запуске программы. Программа не показывает вывод в окне консоли, а в окне консоли просто говорится: «Нажмите любую клавишу, чтобы продолжить ...»
Но, когда я помещаю инструкцию возврата перед строкой 6703, предупреждение исчезает и я получаю правильный результат в окне консоли вывода:
И, следующий, вывод на консоль, когда я добавляю return
перед вызовом функции (в строке 6703) -
Почему я должен добавить return
перед вызовом функции, для чтобы он работал правильно?
Если мы посмотрим на стек вызовов, то будет создано три стека вызовов: 1. Один для основного 2. Второй для towerOfHanoi(stack1,stack2,stack3, 3)
3. Третий для towerOfHanoi(stack1,stack2,stack3, 2)
После этого начинается процесс разматывания стека - 3. towerOfHanoi(stack1,stack2,stack3, 2)
возвращает stack3 в towerOfHanoi(stack1,stack2,stack3, 3)
2. Теперь towerOfHanoi(stack1,stack2,stack3, 3)
в свою очередь возвращает stack3 в main()
Правильно ли я понимаю, как стек процесс раскручивания продолжается? И возвращение важно в строке 6703: return towerOfHanoi(stack1, stack2, stack3, n - 1)
- потому что, если оно отсутствует, мы не сможем вернуть stack3 к main
? -
Не могли бы вы объяснить, как лучше раскрутить кадр стека?