0

所以我写了这个简单的递归程序,当我用 GCC 编译它时出现错误

错误:需要左值作为赋值的左操作数

希望这不是什么严重的事情,任何见解都值得赞赏

谢谢!

#include <stdio.h>
int factorial (int);

int main (void)


{

        int i = 0;
        int a = 0;

        printf("Please enter an integer: ");
        scanf("%d", &i);

        a = factorial (i);

        printf("\n\n%d factorial equals: %d \n", i, a);

        return 0;
}

int   factorial ( int  n )
        {
        if ( n  <= 0 )
                return 0 ;
        else
                f(n) = f( n-1) + 2;              
        }
4

5 回答 5

6

以下语句无效 C:

            f(n) = f( n-1) + 2;              

(我认为这是您收到错误的那一行;您没有说。)

您可能想尝试以下方法:

            return factorial(n-1) + 2;

但是这个名称factorial具有误导性,因为这不是阶乘函数的正确公式。

于 2011-06-17T03:19:50.077 回答
3

你为什么写这个

   f(n) = f( n-1) + 2; 

我看不到任何名为f().
这不是计算任何数字的阶乘的正确公式。查看 Greg 提供的链接。

将其更改为

int  factorial (int  n)
    {
     if (n==1||n==0)
            return 1;
    else
            return n*factorial(n-1);              
    }
于 2011-06-17T03:21:29.473 回答
0

赋值运算符 = 需要左侧的变量,右侧的值被分配给该变量。您不能将某些东西分配给函数,根据 C 语法,这就是 f(n) 的含义。这是为代码行赋值,这是没有意义的。函数左侧唯一有意义的是可以存储值的东西

不过,函数可以放在赋值的右侧,只要它们返回一些东西(它们不是 void 类型)。

要获得正确的阶乘,您需要多考虑一下...首先请记住,您希望最后一个值为 1,而不是 0。阶乘中的所有数字都相乘。

于 2011-06-17T08:57:26.577 回答
0

错误在于您的阶乘函数中的 f(n) = f(n+1)。任何带括号的东西都是 c 中的函数,不能为函数赋值。你可能想要 n = factorial(n+1);

于 2011-06-17T03:21:35.443 回答
0

替换 f(n) = f(n-1) + 2; 和

return n*factorial(n-1)

是的,0!是一个所以添加

if(n==0) return 1;
于 2011-06-17T03:22:58.267 回答