-2

再帰的な C 関数 int sum (int * x, int n) は、2 進表記で 2 つ以上の 1 を持つ配列の要素の数を返します。 )

この機能に問題があります。私はもう試した :

int sum(int *x,int n)
{
if(n==1)return *x;
else
return ( x[n-1]+sum(x+1,n-1));
} 

しかし、この機能は機能しません....誰か助けてもらえますか?

4

2 に答える 2

3

再帰的なステップが間違っています。そのはず:

return x[0] + sum(x + 1, n - 1);

配列に沿って再帰的にステップしながら、最後の要素を追加しています。最初のもの、つまり配列の「先頭」を追加する必要があります (リストとして表示されている場合)。

于 2013-11-04T11:53:39.467 に答える
0

あなたの説明によると、間違ったロジックを使用しています

再帰的な C 関数 int sum (int * x, int n) は、バイナリ表記で 2 つ以上の配列の要素の数を返します 1

int NumberOfSetBits(int i)
{
    i = i - ((i >> 1) & 0x55555555);
    i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
    return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}

int sum(int *x,int n)
{
    static int count = 0;
    if(NumberOfSetBits(*x) > 2)
      count++;    

    if(n==1)
        return count;
    else
        return sum(x+1,n-1);
} 
于 2013-11-04T12:09:38.827 に答える