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()
これは、任意の数の階乗を計算するための正しい式ではありません。グレッグが提供したリンクを見てください。

に変更します

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 型ではありません)。

階乗を正しく行うには、もう少しよく考える必要があります...まず、最後の値を 0 ではなく 1 にしたいことを思い出してください。そして、階乗のすべての数値が乗算されます。

于 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です!1なので追加

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