С и рекурсия

Модератор: Модераторы разделов

z29
Сообщения: 13
ОС: Slackware

С и рекурсия

Сообщение z29 »

Есть простенькая прога на рекурсию

Код: Выделить всё

#include <stdio.h>
void func(int n);
int main(void)
{
        func(1);
        return 0;
}
void func(int n)
{
        printf("level %d\n",n);
        if (n<4)
                func(n+1);
        printf("LEVEL %d\n",n);
}

результат ее:

Код: Выделить всё

level 1
level 2
level 3
level 4
LEVEL 4
LEVEL 3
LEVEL 2
LEVEL 1

Помогите разобраться,почему здесь, когда выводится строка LEVEL 4 , n уменьшается и выводится LEVEL 3 и тд?
Slackware 12.0 kernel 2.6.21.x GCC 4.1.2
знание принадлежит миру...
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: С и рекурсия

Сообщение eduard_pustobaev »

n не уменьшается. Просто printf("LEVEL %d\n",n); выполняется вне условия if.
Вот посчитайте, что будет после if в рекурсивно вызванной rec(n==4). Выполняется printf("LEVEL %d\n",n==4); а вызвана эта функция была в условии if рекурсивно вызванной функции rec(n==3), значит после этого выполнится printf("LEVEL %d\n",n==3); и так далее.


P.S. Рекурсия штука мозголомная :)
В дисгармонии со вселенной.
Спасибо сказали:
z29
Сообщения: 13
ОС: Slackware

Re: С и рекурсия

Сообщение z29 »

eduard_pustobaev, благодарю ...
Slackware 12.0 kernel 2.6.21.x GCC 4.1.2
знание принадлежит миру...
Спасибо сказали: