2016-07-15 6 views
-4

при компиляции i m получение ошибок ошибка: lvalue требуется как левый операнд присваивания fac (0) = 1; ошибка: lvalue требуется как левый операнд присваивания fac (i) = i * fac (i-1);lvalue требуется как левый операнд присваивания

#include<stdio.h> 


int fac(int i) 


{ 

    int j; 

    fac(0)=1; 

    fac(i)=i*fac(i-1); 


    printf("%d",fac(i)); 


} 

int main() 
{ 

    int x,y; 

    printf("enter the number"); 

    scanf("%d",&x); 

    if(x>=0) 

    { 
     fac(x); 
    } 


} 
+1

'FAC (0) = 1;' Действительно? Откуда вы начали изучать 'C'? – Michi

ответ

0
fac(0)=1; 

не действует с, не присвоить значение для рекурсии, как это.

кажется, что вы хотите что-то ближе к

if(j==0) { 
    return 1; 
} 


fac(i)=i*fac(i-1); 

же здесь вы не можете присвоить значение fac(i), потому что это вызов функции.

2

В C вы не возвращаете значение функции таким образом; вместо этого, можно было бы написать что-то вроде

if (i == 1 || i == 0) 
    return 1; 

return i * fac(i - 1); 

Проблема в том, что результат из fac(0) не относится к объекта, что вы можете написать на; это похоже на попытку присвоить новое значение 1 - вы не можете этого сделать.

0
fac(0)=1; 

Здесь fac является функцией. fac(0) вернет некоторое значение (скажем, x). Затем вы не можете назначить это возвращаемое значение равным 1. Не в C по крайней мере.

То, что вы пытаетесь сделать, это установить функция возвращает 1, когда вход 0.

Это может быть достигнуто путем

int fac(int i) 
{ 
    int j; 
    if (i == 0) 
    { 
    return 1; 
    } 
    else 
    { 
    return (i*fac(i-1)); 
    } 
    printf("%d",fac(i)); 
} 
+1

Обратите внимание, что оператор 'printf' никогда не будет выполнен в этом коде. –