递归 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 的数组元素的数量
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);
}