Я знаю, что рекурсия - это метод вызова функции внутри самой функции.но приведенный ниже код смущает меня тем, как он может выполнить часть cout
после первой рекурсии:
(этот код решает головоломку Ханойской башни)
#include <iostream>
using namespace std;
void move_rings(int n, int src, int dest, int other);
int main(void)
{
int rings;
cout << "Number of Rings: ";
cin >> rings;
move_rings(rings, 1, 3, 2);
system("PAUSE");
}
void move_rings(int rings, int source, int destination, int other)
{
if (rings == 1)
{
cout << "Move from " << source << " to " << destination << endl;
}
else
{
move_rings(rings - 1, source, other, destination);
cout << "Move from " << source << " to " << destination << endl;
move_rings(rings - 1, other, destination, source);
}
}
Как выКак видите, функция move_rings
вызывает себя после оператора if
.
Когда я это визуализирую, я вижу бесконечный цикл ... Как эта функция может выполнять
?
cout << "Move from " << source << " to " << destination << endl;
часть?
Вывод программы следующий:
Move from 1 to 3
Move from 1 to 2
Move from 3 to 2
Move from 1 to 3
Move from 2 to 1
Move from 2 to 3
Move from 1 to 3