2011-06-17 57 views
0

所以我写了这个简单的递归程序,当我用GCCC程序设计:递归

error: lvalue required as left operand of assignment

编译它正在一个错误希望这个心不是什么严重的,任何见解表示赞赏

的感谢!

#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;    
     } 

回答

6

下面的语句是无效C:

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

(我想这是你得到了错误的行,你不说)

你可能想尝试以下:

  return factorial(n-1) + 2; 

但随后的名字factorial是误导,因为那是不是factorial function的正确公式。

+0

是的,这是行! – Jennifer 2011-06-17 03:20:23

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);    
    } 
+0

最好用描述来描述你不能为返回值赋值;主要是左值不能是函数执行。 – Suroot 2011-06-17 03:32:43

+0

给出了解决方案,但如果(n <= 1)可能会更好地防止致命错误,如果n是负数。 – thelionroars1337 2011-06-17 09:09:15

0

该错误是使用f(N)= F(N + 1)。括号中的任何内容都是c中的函数,并且函数不能赋值。你可能想要n =阶乘(n + 1);

+0

它会编译但不会给因式...事实上,这将是一个递归调用,这将是'无限'(直到内存耗尽)。 – thelionroars1337 2011-06-17 08:16:40

0

代替f(n)= f(n-1)+2;与

return n*factorial(n-1) 

是的,0!是一个,这样添加

if(n==0) return 1; 
+0

a未在该功能的范围内定义。 – thelionroars1337 2011-06-17 09:14:38

+0

我的坏,是一个错字 – 2011-06-17 15:04:30

+0

这一切都在兜帽哥们 – thelionroars1337 2011-06-17 18:09:29

0

赋值操作符=需要可变在左手侧,向其中在右手侧的值被分配给。你不能把某些东西分配给一个函数,这就是f(n)是根据C语法的。这是给代码行分配一个值,这是没有意义的。在函数的左边唯一有意义的是,它可以存储值

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

为了得到正确的因子,您需要多考虑一点......首先请记住,您希望最后一个值为1,而不是零。并且阶乘中的所有数字都是相乘的。