Выход 5 5 6 7 8 9 объясните как? - PullRequest
0 голосов
/ 13 октября 2019

Может кто-нибудь объяснить, как работает эта рекурсия в следующем коде?

#include<stdio.h>

func(int x)
{

    if(x>5) 
    func(--x);

    printf("%d",x);
}

int main(void)
{

func(10);
return 0;

}

1 Ответ

0 голосов
/ 13 октября 2019

Логика функции работает следующим образом: если x больше 5, функция будет вызываться снова с x, уменьшенным на 1.

В следующей строке:

func(--x);

--x означает, что x будет уменьшено на 1 до выполнения этой строки кода, отличающейся от x--, что означает, что x будет уменьшено после строки,Когда x будет равно 5, оно будет напечатано, а затем функция вернется в последнее место, откуда она была вызвана, и продолжит оттуда, означая, что x будет напечатано снова со значением, которое было в последнем вызове, затем вернитесь снова и т. д. и т. д.

Таким образом, функция в основном напечатает все числа от 5 до заданного числа (если оно больше 5, конечно), за исключением заданного числа, так как x был уменьшенперед печатью.

В вашем случае вызов func(10) приведет к следующему выводу:

56789
...