Рекурсивная ф-ция => итеративная ф-ция
1594 сообщения
#14 лет назад
Вот допустим надо преобразовать рекурсивную функцию к итеративной, заменив использование машинного стека - собственным.То есть, есть 3 функции работы со стеком (push(int a) - ложит элемент на верхушку стека, pop() - возвращает последний и удаляет его, empty() проверяет стек на пустоту)
И есть рекурсивная функция
int f(int a) {
if(a == 0) return;
printf("%d", a);
f(a-1);
f(a-1);
printf("%d", a);
}
2 часа промучался над возможной реализацией итеративной функции. Итог правильно работает только для a = 0, a = 1, a = 2;
void f(int a) {
while( a || !empty()) {
if(!a) a = pop();
else push(a);
printf("%d", a--);
if(a) {
push(a);
printf("%d", a);
}
}
}
Вроде бы принцип понял, но вот как реализовать его для функции, которая 2 раза вызывает саму себя с одним и тем же параметром - понять не могу((
Может кто-нибудь подсказать что я делаю не так?
1157 сообщений
#14 лет назад
Циклов должно быть 2.Выполняться они должны по очереди, сначала первый, потом второй.

Первый цикл проходит по первому вызову f(a-1), второй по второму вызову f(a-1).