C Программа рекурсии не будет компилироваться с GCC - PullRequest
1 голос
/ 05 мая 2011
#include <stdio.h>

int main (void)

{
int n, x;

int factorial (int n)
{
if (x<=0)
{
 printf("x equals: ");
return 1;
}
else
{
return n * factorial (n-1); 
}
f(x)=f(x-1)+2; //says error is here
}
return 0;
}

Я пробовал кое-что и не могу заставить его работать.Я мог бы просто переутомиться и заглянуть за мельчайшую вещь, но помощь будет очень признательна!Спасибо:)

Ответы [ 3 ]

6 голосов
/ 05 мая 2011

Вы не можете объявить определение функции внутри main() или любой другой функции ... определения функций должны быть автономными и не иметь встроенных определений функций внутри них.

Также я не уверен, что вы делаете в строке, которую вы пометили как ошибку, поскольку f() не является определенной функцией, поэтому вы не можете ее вызвать. Кроме того, необходимо будет вернуть некоторый тип l-значения, такой как указатель на статическую переменную, объявленную внутри функции, или указатель, переданный по ссылке на функцию, и даже в этом случае синтаксис неправильный, так как необходим требуемый разыменование ... так что в принципе вы не можете делать то, что делаете на этой линии.

Чтобы получить что-то, что компилируется, попробуйте

#include <stdio.h>

int factorial (int n)
{
    if (n <= 0)
    {
        return 1;
    }
    else
    {
        return n * factorial (n-1); 
    }
}

int main (void)
{
    int x;

    x = factorial(5);
    printf("Factorial of 5 is equal to %d", x);

    return 0;
}
1 голос
/ 05 мая 2011

Функция не может быть определена внутри другой функции.Однако gcc позволяет это как расширение.Вы определили функцию с именем factorial, но пытаетесь использовать f, который нигде не был объявлен.

1 голос
/ 05 мая 2011

Используйте отступ, чтобы увидеть возможные проблемы с областью действия:

 #include <stdio.h>

int main (void)
{
    int n, x;

int factorial (int n)
{
    if (x<=0)
    {
        printf("x equals: ");
        return 1;
    }
    else
    {
        return n * factorial (n-1); 
    }
    f(x)=f(x-1)+2; //says error is here
}
return 0;

}

Насколько я помню, C не имеет замыканий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...