C递归程序不能用/ GCC编译

时间:2011-05-05 15:34:50

标签: c

#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 个答案:

答案 0 :(得分:6)

您不能在main()或任何其他函数内声明函数定义...函数定义必须是独立的,并且不能在其中包含嵌入的函数定义。

此外,由于f()不是已定义的函数,我不确定您在标记为错误的行上正在执行的操作,因此您无法调用它。此外,它需要返回某种类型的l值,例如指向函数内部声明的静态变量的指针,或者通过引用函数传递的指针,即使这样,语法也不正确,因为需要它dereference ...所以基本上你不能做你在那条线上做的事情。

要获得编译的内容,请尝试

#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 :(得分:1)

使用缩进查看范围可能存在的问题:

 #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没有闭包。

答案 2 :(得分:1)

无法在另一个函数中定义函数。但是gcc允许它作为扩展。您已经定义了一个名为factorial的函数,但正在尝试使用尚未在任何地方声明的f