递归函数int sum(int * x,int n)?

时间:2013-11-04 11:46:28

标签: c recursion

递归C函数int sum(int * x,int n)返回元素数 在二进制题字中有两个以上的数组1.(例如:超过两个1的二进制元素是:111001,11011 ......)

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

它正在添加最后一个元素,同时递归地沿着数组步进。最终会出错,它应该添加第一个,即数组的“头部”(如果看作列表)。

答案 1 :(得分:0)

根据您的描述,您使用了错误的逻辑

  

递归C函数int sum(int * x,int n)返回数字   二进制题字中的数组元素有两个以上的数据

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