Вы можете преобразовать цикл в рекурсию по формуле.Обратите внимание, что do_something()
не обязательно должен быть вызовом одной функции;это может быть что угодно (кроме управления потоком, например break
, которое изменило бы поведение цикла):
void iterative() {
for (int x = 0; x < 10; ++x) {
do_something(x);
}
}
становится
void recursion_start() {
recursive(0);
}
void recursive(int x) {
if (x < 10) {
do_something(x);
recursive(x + 1);
}
}
Обратите внимание, что вы можете переписать это следующим образом, который в хорошем компиляторе на самом деле будет работать так же быстро, как итеративная версия (это называется «оптимизация хвостового вызова»).Например, gcc 4.6.2 удается это сделать - на самом деле, он достаточно умен, чтобы делать и вышеприведенную версию.
void recursive(int x) {
if (x >= 10)
return;
do_something(x);
recursive(x + 1);
}