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

C 递归函数int-sum(int*x,int-n)?,c,recursion,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)); } 但是这个功能不起作用。。。。有人能帮我吗?递归步骤错了。应该是: return x[0] + sum(x + 1, n - 1); 它添加最

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

但是这个功能不起作用。。。。有人能帮我吗?

递归步骤错了。应该是:

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

它添加最后一个元素,同时递归地沿着数组前进。如果结果完全错误,则应添加第一个,即数组的“头”(如果被视为列表)。

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

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


为什么这必须是递归的?问题还不清楚。当然它不起作用,您不检查数组元素的二进制表示形式。@Jite,它是通过指针工作的arithmetic@StoryTellerOfc,brain-f*kup,认为您不能将
1
添加到
x
值中,并期望它指向数组的下一个成员,哈哈。谢谢,看起来他的函数(试图)对数组的所有元素求和
x[]
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);
}