2013-11-04 57 views
-2

递归C函数int sum(int * x,int n)它返回数组中元素个数 在二进制文字中有多于两个1.(例如:具有多于两个1的二进制元素是:111001,11011 ...)递归函数int sum(int * x,int n)?

我有这个功能的问题。我试过了:

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

但这个功能不起作用....任何人都可以帮我吗?

+0

为什么这必须是递归的? –

+1

问题不明确。 – Sadique

+0

当然,它不起作用,你不检查数组元素的二进制表示。 – StoryTeller

回答

3

递归步骤是错误的。它应该是:

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

它递增最后一个元素,同时递归地沿着数组步进。最后所有错误,它应该加上第一个,即数组的“头”(如果看作一个列表)。

0

根据你描述你正在使用错误的逻辑

递归C函数INT总和(INT * X,INT n)的返回数组的元素的数目 ,其在二进制碑文具有两个以上的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); 
} 
+0

不,它看起来像他的函数(试图)总和数组'x []'的所有元素。 –

相关问题